MSBuild脚本利用解决方案信息

4
我有一个csproj文件,它是两个不同的Visual Studio解决方案的一部分。该项目文件应该能够根据使用它的解决方案稍微有所不同。我需要的是像“条件”这样可用的东西 - 例如命名为$(SolutionName)的属性 - 自动填充。
至少,这是我的想法。我没有找到类似的东西。
我还考虑过使用两个小项目文件导入公共部分。我猜这将防止从Visual Studio内部编辑所有这些属性。它只会在活动的“主文件”中写入更改,对吗?
那么,在项目级别上是否有其他区分解决方案信息的方法?
1个回答

7
原来有一个叫做$(SolutionName)的属性。试试这个方法:首先设置一个环境变量:
> set MSBuildEmitSolution=1

然后使用同一命令行从MSBuild构建你的解决方案文件。
> MSBuild My.sln

你会在解决方案文件中找到MSBuild项目转换,它将被命名为 My.sln.metaproj。只需在文本编辑器中打开它,你就可以看到其他属性。检查此项目文件中的“Build”目标,你可以看到当MSBuild构建你的项目时传递所有这些属性,因此你应该能够根据任何条件区分条件。

metaproj文件包含<Configuration>Debug</Configuration><SolutionName>MySolutionName</SolutionName>。我在我的csproj文件中使用<Choose>块进行了切换,其中包含<When Condition=" '$(SolutionName)' == 'MySolutionName' ">。这个方法可行 - 但仅适用于“Debug”配置。对于“release”,$(SolutionName)似乎为空,我的<Otherwise>子句将被使用。 - Michael
我在第一条评论中说错了。它完全按照描述的方式工作。非常感谢您,特别是展示了提取此类信息的一般方法。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接