2017-07-28 43 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> 
相關問題