2017-07-28 41 views
0

我为Visual Studio创建了一个VSIX扩展,它添加了一个自定义的下拉菜单。我需要此菜单中的值应用于文件的.csproj属性,而不必更改文件本身,如配置菜单。例如:如何在不写入.csproj文件的情况下从VSIX设置自定义的MsBuild属性?

<PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> 
    <DefineConstants>DEBUG;TRACE;</DefineConstants> 
</PropertyGroup> 

- .csproj的默认内容。当我从Visual Studio配置下拉菜单中选择“调试”时,配置属性值切换到Debug而不更改.csproj文件,并且激活代码文件中的#if DEBUG块。

我在解决方案中有多个项目,每个项目都有这个属性。 如果我覆盖.csproj,那么这些更改将由源代码控制进行监视,这是我不想要的。 请帮忙。

回答

1

如何在不写入.csproj文件的情况下设置自定义的MsBuild属性?

如果自定义的MSBuild属性在项目文件的PropertyGroup,你可以调用的MSBuild一个参数传递到由MSBuild的命令行中的项目文件:

<PropertyGroup> 
    <CustomTestName>TestValue1</CustomTestName> 
</PropertyGroup> 

命令行:

msbuild /p:CustaomTestName=TestValue2 

或者,您可以在自定义属性中使用选项“condition”,例如项目文件中的[Debug/Release]

<PropertyGroup> 
    <CustomTestName>TestValue</CustomTestName> 
</PropertyGroup> 

<Target Name="CheckPropertiesHaveBeenSet"> 
    <Error Condition="'$(CustomTestName)'=='CustomTestNameNotSet'" Text="Something has gone wrong.. Custom Test Name not entered"/> 
    <PropertyGroup> 
    <CustomTestName Condition="'$(CustomTestName)'=='ChangeTestValue'">ChangeTestValue</CustomTestName > 
    </PropertyGroup> 
</Target> 
相关问题