【发布时间】:2011-01-18 14:12:58
【问题描述】:
我们使用 .NET 3.5 和 VS2008。我有一个包含大约 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 的机器上签出和构建,而无需安装开发工具包)。该解决方案是由开发人员使用 MSBuild 在命令行上构建的,安装批处理文件、CCNet 等。
无论如何,我搜索了一种更好的方法来做到这一点(即类似解决方案级别属性的方法),但找不到。我知道可以在 MSBuild 命令行中设置属性值,但这对我来说不能很好地扩展,因为所有现有和未来的命令行都必须包含它。我还考虑过在第一个构建的项目中调用 before 目标来使用自定义任务来设置环境变量,并在最后一个项目中调用 after 目标来删除它,但这似乎比单独编辑所有项目文件更沉重和脆弱.
请让我知道您是否做过类似的事情,或者知道一种方法可以为每个解决方案设置一次属性,以供多个项目使用(包括我没有经验的 .NET 4/VS2010)。请记住,我们使用 MSBuild 来构建 sln 文件,而不是单个项目。
【问题讨论】:
标签: .net visual-studio-2008 msbuild