为了账号安全,请及时绑定邮箱和手机立即绑定

有没有一种方法可以自动将内容文件包含到asp.net项目文件中?

有没有一种方法可以自动将内容文件包含到asp.net项目文件中?

富国沪深 2019-11-26 15:03:48
我经常在ASP.NET项目中添加很多内容文件(主要是图像和js)。我正在使用VS发布系统,并且在发布时,直到将新文件包含在项目中之后,才会发布新文件。我想自动包含指定目录中的所有文件。有没有一种方法可以指定哪些目录应自动包含在csproj文件或其他任何地方?
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

我知道老线程,但是我找到了一种方法,但我一直忘了它,而在上次寻找它的搜索中,我偶然发现了这个问题。我发现最好的方法是使用.csproj文件中的BeforeBuild目标。


<Target Name="BeforeBuild">

    <ItemGroup>

        <Content Include="**\*.less" />

    </ItemGroup>

</Target>

VS 2010不会涉及此部分,它可确保每次构建项目时文件都作为内容包含在内。


查看完整回答
反对 回复 2019-11-26
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您只需扩展您的网站.csproj文件即可。只需使用递归通配符添加内容根文件夹:


...

<ItemGroup>

    <!-- your normal project content -->

    <Content Include="Default.aspx" />


    <!-- your static content you like to publish -->

    <Content Include="Images\**\*.*" />

</ItemGroup>

...

这样做会使此文件夹以及下面的所有内容在解决方案浏览器中可见。


如果尝试通过指定隐藏解决方案浏览器中的文件夹


<Content Include="Images\**.*.*">

    <Visible>false</Visible>

</Content>

它不会被发布。


更新资料


正如您已经发现的,一旦您触摸解决方案中的文件夹,通配符将被替换,因为VS项目并非旨在包含任意内容。


因此,您将必须确保文件夹及其内容永远不会在VS中被修改-添加或删除文件只能在文件系统上完成...这就是您想要的,因为我了解您的问题。


如果该文件夹可以在VS中隐藏,但我找不到隐藏它并发布的方法,将会更容易。


另一种不成功的方法是按CreateItem任务包含文件夹。这导致文件夹的内容被发布到\ bin \ app.publish \ ...,并且无法说服将其与.csproj中的内容项一起发布,因此我没有在我的答案中提出它。


查看完整回答
反对 回复 2019-11-26
?
慕后森

TA贡献1802条经验 获得超5个赞

对于使用Chris的答案有问题的人,这是Visual Studio 2012及更高版本的解决方案:


<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">

  <ItemGroup>

    <Content Include="images\**" />

  </ItemGroup>

</Target>

就像克里斯在回答中提到的那样- 即使您手动在目标目录中四处逛逛(添加/删除文件),Visual Studio 也不会涉及到此<Target>部分。


请注意,您应该在其中包含文件的子目录(在上述情况下为images)。Visual Studio / MSBuild会将这些文件放在项目结构中的同一目录中。如果不使用子目录,则文件将放置在项目结构的根目录下。


有关通配符的快速说明:


**递归地表示所有内容(文件,子目录和其中的文件)

*.ext将ext在顶级目录中包含所有带有扩展名的文件,但不包括子目录

例如,*.ext可能是*.png,*.js等。任何文件扩展名都可以使用

**\*.ext将包括ext顶级目录和所有子目录中所有带有扩展名的文件。

请参阅“ 如何使用Nant / Ant命名模式”中的答案?有关示例的更完整说明。

为了完成操作,请注意,使用<Target>和不使用之间有所不同。


通过这种<Target>方法,Visual Studio 将不会在解决方案资源管理器中显示文件。


<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">

  <ItemGroup>

    <Content Include="images\**" />

  </ItemGroup>

</Target>

非<Target>方法将指示Visual Studio 在解决方案资源管理器中显示文件。这一缺点是,对自动目录的任何操作都将导致Visual Studio覆盖通配符条目。还应注意,以下方法仅在VS中打开“解决方案/项目”后才会更新“解决方案资源管理器”。甚至解决方案资源管理器的“刷新”工具栏按钮也不会执行此操作。


<ItemGroup>

  <Content Include="images\**" />

</ItemGroup>


查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 659 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信