好吧,所以我有几十个解决方案都使用完全相同的命令行构建.
msbuild SolutionName.sln/p:property1 = value1; property2 = value2; etc etc等.
除了物业数量增长和增长.
有没有办法指定一个外部文件,我怎么没有最终得到10行msbuild命令?(想想财产100,财产101等).
我知道.wpp.target文件.但是,不得不将它们复制到每个项目文件夹中......这是我最后的选择.
不,我没有修改任何默认的MSBuild目标/文件.
要回答原始问题,是的,您可以在外部文件中指定属性.它们被称为MSBuild响应文件.
msbuild somesolution.sln @PathToResponseFile.rsp
在响应文件中,您可以放置属性,每行一个.
/verbosity:detailed /target:build /platform:AnyCPU /configuration=Release
一些更好理解的链接:http : //dailytechlearnings.wordpress.com/2011/08/24/msbuild-response-file/ http://msdn.microsoft.com/en-us/library/vstudio/ms404301.aspx
但是,使用msbuild文件构建解决方案和项目是一种更好的解决方案.您可以创建完全按照自己的意愿执行的全局目标.您可以创建自己的自定义清理和构建目标,然后构建/清理您的解决方案.
首先 - 我建议您使用msbuild脚本来构建解决方案,而不是使用命令行直接构建sln文件.例如使用这样的东西:
msbuild SolutionName.Build.proj
在这个Solution1.Build.proj中你可以放任何简单的东西
<Project ToolsVersion="4.0" DefaultTargets="BuildMe" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="BuildMe"> <MSBuild Projects="SolutionName.sln" Properties="property1=value1;property2=value2;"/> </Target> </Project>
完成此步骤后,可以为构建过程增加灵活性,您可以开始利用MSProild任务的AdditionalProperties元数据.
然后,您可以使用<Import
构造将共享属性列表存储在单独的文件和项元数据中,以传递属性值:
<Project ToolsVersion="4.0" DefaultTargets="BuildMe" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="MySharedProperies.props" /> <ItemGroup> <ProjectToBuild Include="SolutionName.sln"> <AdditionalProperties>SomeProjectSpecificProperty</AdditionalProperties> </ProjectToBuild> </ItemGroup> <Target Name="BuildMe"> <MSBuild Projects="@(ProjectToBuild)" Properties="@(MySharedProperies)"/> </Target> </Project>
您可以查看此帖子,了解有关属性和其他属性元数据或此原始MSDN参考的更多详细信息 (滚动到"属性元数据"部分)
如果你有任何问题,这是如何做到的基本想法 - 随意问.