我们正在使用.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的机器上进行检出和构建,而不必安装SDK)。开发人员使用MSBuild在命令行上构建解决方案,安装批处理文件,CCNet等。总之,我正在寻找更好的方法来实现这一点(例如解决方案级属性),但是我找不到。我知道可以在MSBuild命令行中设置属性值,但由于所有现有和将来的命令行都必须包含它,因此这不适用于我。我还考虑过在第一个构建的项目中调用before目标以使用自定义任务设置环境变量,并在最后一个项目中调用after目标以删除它,但这似乎比仅编辑所有项目文件更加繁重和脆弱。
请告诉我是否已经做过类似的事情或知道一种可以一次设置整个解决方案中多个项目都可利用的属性的方法(包括.NET 4 / VS2010,我没有经验)。请记住,我们使用MSBuild构建sln文件,而不是单个项目。
Directory.Build.props
,则它将自动导入到该目录层次结构中的所有项目中。 - Martin Ullrich