使用新的csproj格式的TransformXml?

时间:2017-11-15 16:24:25

标签: .net transformation csproj

我最近升级了一个解决方案,使用旧的xml格式的csproj文件到xproj弃用后的新版本。 即看起来像这样的格式:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <AssemblyName>MyProject</AssemblyName>
    <PackageId>MyProject</PackageId>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
  </PropertyGroup>
</Project>

问题是这个解决方案包含很多已经停止工作的xml转换。 正如我所理解的那样,这些转换是由MyProject.wpp.targets文件启动的。我没有自己设置这个并且我没有那么多的知识,但是由于这个文件与旧的csproj文件的格式相同,我猜它可能是为什么它不起作用的原因但我不知道我知道。 任何帮助都非常适用于如何让它再次运作。

这就是今天wpp.target文件的样子

<?xml version="1.0" encoding="utf-8"?>

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="[MSBuild]\CommonConfigTransforms.xml"/>
    <Import Project="[MSBuild]\BuildSpecificConfigTransforms.xml"/>
    <Import Project="[MSBuild]\DeleteTempConfigFiles.xml"/>

    <PropertyGroup>
        <PrepareForBuildDependsOn>
            $(PrepareForBuildDependsOn);
            CommonConfigTransforms;
            BuildSpecificConfigTransforms;
        </PrepareForBuildDependsOn>
        <BuildDependsOn>
            $(BuildDependsOn);
            DeleteTempConfigFiles
        </BuildDependsOn>
    </PropertyGroup>
</Project>

1 个答案:

答案 0 :(得分:2)

来自Migrating tasks from old csproj to new csproj format #2746的MSBuild存储库的GitHub版本:

  

您必须更改Target以使其适合新方法(在这种情况下为 AfterTargets =“ PrepareForBuild” ),因此csproj的新部分应如下所示:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="ApplyConfigurationConfigFile" AfterTargets="PrepareForBuild" Condition="Exists('App.$(Configuration).config')">
  <ItemGroup>
    <AppConfigWithTargetPath Remove="App.config" />
    <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
      <TargetPath>$(TargetFileName).config</TargetPath>
    </AppConfigWithTargetPath>
  </ItemGroup>
  <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
</Target>