猿问

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

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



富国沪深
浏览 660回答 3
3回答

qq_遁去的一_1

我知道老线程,但是我找到了一种方法,但我一直忘了它,而在上次寻找它的搜索中,我偶然发现了这个问题。我发现最好的方法是使用.csproj文件中的BeforeBuild目标。<Target Name="BeforeBuild">&nbsp; &nbsp; <ItemGroup>&nbsp; &nbsp; &nbsp; &nbsp; <Content Include="**\*.less" />&nbsp; &nbsp; </ItemGroup></Target>VS 2010不会涉及此部分,它可确保每次构建项目时文件都作为内容包含在内。

慕码人2483693

您只需扩展您的网站.csproj文件即可。只需使用递归通配符添加内容根文件夹:...<ItemGroup>&nbsp; &nbsp; <!-- your normal project content -->&nbsp; &nbsp; <Content Include="Default.aspx" />&nbsp; &nbsp; <!-- your static content you like to publish -->&nbsp; &nbsp; <Content Include="Images\**\*.*" /></ItemGroup>...这样做会使此文件夹以及下面的所有内容在解决方案浏览器中可见。如果尝试通过指定隐藏解决方案浏览器中的文件夹<Content Include="Images\**.*.*">&nbsp; &nbsp; <Visible>false</Visible></Content>它不会被发布。更新资料正如您已经发现的,一旦您触摸解决方案中的文件夹,通配符将被替换,因为VS项目并非旨在包含任意内容。因此,您将必须确保文件夹及其内容永远不会在VS中被修改-添加或删除文件只能在文件系统上完成...这就是您想要的,因为我了解您的问题。如果该文件夹可以在VS中隐藏,但我找不到隐藏它并发布的方法,将会更容易。另一种不成功的方法是按CreateItem任务包含文件夹。这导致文件夹的内容被发布到\ bin \ app.publish \ ...,并且无法说服将其与.csproj中的内容项一起发布,因此我没有在我的答案中提出它。

慕后森

对于使用Chris的答案有问题的人,这是Visual Studio 2012及更高版本的解决方案:<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">&nbsp; <ItemGroup>&nbsp; &nbsp; <Content Include="images\**" />&nbsp; </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">&nbsp; <ItemGroup>&nbsp; &nbsp; <Content Include="images\**" />&nbsp; </ItemGroup></Target>非<Target>方法将指示Visual Studio 在解决方案资源管理器中显示文件。这一缺点是,对自动目录的任何操作都将导致Visual Studio覆盖通配符条目。还应注意,以下方法仅在VS中打开“解决方案/项目”后才会更新“解决方案资源管理器”。甚至解决方案资源管理器的“刷新”工具栏按钮也不会执行此操作。<ItemGroup>&nbsp; <Content Include="images\**" /></ItemGroup>
随时随地看视频慕课网APP
我要回答