我们使用MSBuild通过CruiseControl构建我们的解决方案。我们有几个程序集和一个网站作为解决方案的一部分。通过VS2008构建,构建成功。但是在构建框中,我们收到以下错误。
ASPNETCOMPILER (,):
errorASPCONFIG: The CodeDom provider type "Microsoft.VJSharp.VJSharpCodeProvider, VJSharpCodeProvider, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" could not be located.
原因是在网站的scripts文件夹中我们有几个扩展名为.java的文件。我们不希望构建这些文件。实际上我们在构建的脚本文件夹中不需要任何东西。
有没有办法在网站项目中排除文件夹或扩展程序?或者告诉MSBuild遵循VS2008用来决定编译什么的相同规则?
答案 0 :(得分:1)
您可以使用Web Deployment Projects。在WDP中,您可以使用ExcludeFromBuild项来排除这些文件。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa479568.aspx。
答案 1 :(得分:1)
您可以使用Item元素的移除属性(brief introduction on MSDN)删除整个文件夹。
例如,如果您的项目定义如下:
<ItemGroup>
...
<Compile Include="Tests\Test1.cs" />
<Compile Include="Tests\SubTests\SubTest1.cs" />
...
</ItemGroup>
并且您想要从“Tests”文件夹中排除所有类,您可以在项目结束时定义任务:
...
<PropertyGroup>
<CoreCompileDependsOn>$(CoreCompileDependsOn);ExcludeTestsFolder</CoreCompileDependsOn>
</PropertyGroup>
<Target Name="ExcludeTestsFolder">
<ItemGroup>
<Compile Remove="Tests\**\*.cs" />
</ItemGroup>
</Target>
</Project>
在外部文件中定义此类任务并使用Import元素(thorough explanation in another thread)导入它也是一个好主意。
答案 2 :(得分:0)
构建文件内部将是具有相关项目的项目组。只需编辑该文件即可排除该项目。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Res Include = "Strings.fr.resources" >
<Culture>fr</Culture>
</Res>
<Res Include = "Dialogs.fr.resources" >
<Culture>fr</Culture>
</Res>
<CodeFiles Include="**\*.cs" Exclude="**\generated\*.cs" />
<CodeFiles Include="..\..\Resources\Constants.cs" />
</ItemGroup>
...
</Project>
编辑:更正以回答评论。
如果您只有一个sln文件,是否可以创建将文件移开的元msbuild脚本,调用任务来构建解决方案,然后将它们放回去?