我们在 VS2008 中使用 .NET 3.5。我有一个包含约 20 个项目的解决方案,随着应用程序的增长和添加新模块,这个数字会随着时间的推移而增长。今天我需要为每个项目设置一个属性。我必须编辑每个 csproj 文件以添加以下内容:
<Target Name="BeforeBuild">
<CreateProperty Condition=" '$(SolutionDir)' != '' And '$(SolutionDir)' != '*Undefined*' "
Value="$(SolutionDir)Tools\MSBuild">
<Output TaskParameter="Value" PropertyName="AlToolPath" />
</CreateProperty>
</Target>
这是为了使项目能够找到存储在我的源存储库中的程序集链接器 (AL.exe),以便构建与计算机无关(可以在任何具有 .NET 的计算机上检出和构建,而无需安装 SDK)。该解决方案由开发人员使用MSBuild在命令行上构建,安装批处理文件、CCNet等。
不管怎样,我寻找一种更好的方法来做到这一点(即解决方案级别属性之类的东西),但找不到。我知道可以在 MSBuild 命令行中设置属性值,但这对我来说不能很好地扩展,因为所有现有和未来的命令行都必须包含它。我还考虑过在第一个构建的项目中调用 before 目标以使用自定义任务来设置环境变量,并在最后一个项目中调用 after 目标来删除它,但这似乎比单独编辑所有项目文件更繁重和脆弱。
如果您做过类似的事情,或者知道如何为每个解决方案设置一次属性,以便多个项目(包括我没有经验的 .NET 4/VS2010)使用,请告诉我。请记住,我们使用 MSBuild 来构建 sln 文件,而不是单个项目。
您可以在单个文件中指定此属性以及所有其他常见属性,然后通过在项目文件中包含Import http://msdn.microsoft.com/en-us/library/92x05xfs.aspx陈述。这就是我们在构建环境中所做的事情,该环境有 220 个构建项目和多个共享项目文件(例如“分支”)。效果很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)