我想用MSBuild如何为.csproj创建ChooseElement?

时间:2016-04-23 09:23:03

标签: c# xml visual-studio msbuild csproj

我想创建类似下面的内容,以编程方式创建.csproj文件,我使用

  • 命名空间:Microsoft.Build.Construction
  • 程序集:Microsoft.Build(在Microsoft.Build.dll中)

例如:

 <Choose>
        <When Condition=" '$(Configuration)'=='debug' ">
            <PropertyGroup>
                <DebugSymbols>true</DebugSymbols>
                <DebugType>full</DebugType>
                <Optimize>false</Optimize>
                <OutputPath>.\bin\Debug\</OutputPath>
                <DefineConstants>DEBUG;TRACE</DefineConstants>
            </PropertyGroup>
            <ItemGroup>
                <Compile Include="UnitTesting\*.cs" />
                <Reference Include="NUnit.dll" />
            </ItemGroup>
        </When>
        <When Condition=" '$(Configuration)'=='retail' ">
            <PropertyGroup>
                <DebugSymbols>false</DebugSymbols>
                <Optimize>true</Optimize>
                <OutputPath>.\bin\Release\</OutputPath>
                <DefineConstants>TRACE</DefineConstants>
            </PropertyGroup>
        </When>
        <Otherwise>
            <PropertyGroup>
                <DebugSymbols>true</DebugSymbols>
                <Optimize>false</Optimize>
                <OutputPath>.\bin\$(Configuration)\</OutputPath>
                <DefineConstants>DEBUG;TRACE</DefineConstants>
            </PropertyGroup>
        </Otherwise>
    </Choose>

如何在MsBuild中创建ChooseElement,使用任何When Condition和else块创建上面的xml块。

我写了这样的代码但不起作用:

     var root = ProjectRootElement.Create();
    var choose = root.CreateChooseElement();
    var when1 = root.CreateWhenElement("Condition1"); // How add tag for this one ?
    var when2 = root.CreateWhenElement("Condition2");
    var when3 = root.CreateWhenElement("Condition3");
    var when4 = root.CreateWhenElement("Condition4");
    var ow = root.CreateOtherwiseElement(); // How add tag for this one ?
    choose.AppendChild(when1); // Exception Here !
    choose.AppendChild(when2);
    choose.AppendChild(when3);
    choose.AppendChild(when4);
    choose.AppendChild(ow);
    root.Save("test.csproj");

例外:

 An unhandled exception of type 'System.InvalidOperationException' occurred in Microsoft.Build.dll

Additional information: The parent node is not itself parented.

我认为这个xml块太复杂了!

请有人指导我。

1 个答案:

答案 0 :(得分:0)

我知道有点晚了。刚才看到这个问题。抱歉延误。

您的代码问题是您正在使用var choose = root.CreateChooseElement();创建ProjectElement,但在将任何内容添加到此元素之前,您应该将元素本身附加到Root元素,即。var root = ProjectRootElement.Create();