在项目文件中的引用节点有如下配置:
<ItemGroup>
<Reference Include="ClassLibrary1">
<HintPath>D:/Test/ClassLibrary1.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
如何使D:/Test不使用绝对路径而使用一个可变的参数化路径呢,直接的相对路径是本身就支持的,可变的参数如果是系统内置的如$(MSBuildToolsPath)也是支持的,但如果要自定义一个变量如何支持呢?
这就要用到自定义ToolsVersion的配置了,VS2010却省的ToolsVersion为4.0,注册表位置:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/ToolsVersions/4.0
只要在这个下面添加键值就行了,如添加一个字符串值:
TEST_PATH REG_SZ "D:/Test"
则就可以把上面的相应的配置改为用变量引用了:
<Reference Include="ClassLibrary1">
<HintPath>$(TEST_PATH)/ClassLibrary1.dll</HintPath>
</Reference>
而注册表的值是可以引用环境变量的:
假如已经设置了环境变量:TEST_PATH="D:/TEST";
则可以把TEST_PATH注册表的值改为:
TEST_PATH REG_SZ %TEST_PATH%
这样动态改变环境变量,则相应的TOOLSVERSION的值也改变了。
有时需要注意MSBUILD的配置缓存。
所有环境变量都可作为属性在 Microsoft Build Engine (MSBuild) 项目文件中使用,如:引用%TEST_PATH% ,使用$(TEST_PATH)。