App.config XML 从 NuGet 包转换

App.config XML transform from NuGet Package

我正在尝试按照 these instructions 通过自定义 NuGet 包对目标 App.config 文件执行简单的 XML 转换。

app.config.transform 文件包含以下内容:

<configuration>
  <appSetttings>
    <add key="foo" value="bar" />
  </appSetttings>
</configuration>

.nuspec 文件包含以下内容:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>Foo.Bar</id>
    <version>1.0.0</version>
    <title>Foo Bar</title>
    <authors>Foo</authors>
    <description>Bar</description>
  </metadata>
  <files>
    <file src="app.config.transform" target="content" />
  </files>
</package>

当 运行 nuget pack.

时,这会正确地将文件插入到 .nupkg 文件的 content 文件夹中

在 Visual Studio 2017 (15.6.4) 中,当将 NuGet 包添加到具有现有原始 App.config 文件的全新控制台应用程序时,不会发生任何转换(即 App.config 不变)。 XDT 转换也是如此。

谁能告诉我为什么转换失败?

更新

我在目标 .NET Framework 4.7.1 项目中使用 PackageReference 作为我的包管理格式。

In Visual Studio 2017 (15.6.4) when adding the NuGet package to a brand new Console Application with an existing vanilla App.config file, no transforms take place.

没有发生转换”是什么意思? appSetttings 部分下的新元素和属性未合并到 App.config?

我已经用你的 .nuspecapp.config.transform 文件创建了 nuget 包:

nuget 包:https://1drv.ms/u/s!Ai1sp_yvodHf1QFNsI3ybdw2nanD

然后设置为我的本地提要,新建一个.net console application并将那个nuget包添加到测试项目中,你会发现appSetttings部分下的新元素和属性被合并到App.config,所以 App.config 在安装该 nuget 包后会像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
    </startup>

   <appSetttings>
    <add key="foo" value="bar" />
   </appSetttings>

</configuration>

所以它应该可以正常工作。一种可能是你在安装这个包的时候没有清理缓存,为了确认这一点,请删除解决方案文件夹下的packages文件夹。

注:

请注意,NuGet 并未替换 startup 部分,它只是通过仅添加新元素和属性将新条目合并到其中。 NuGet 不会更改任何现有元素或属性。

更新:

This does not work for me when performing exactly the same steps as you, but I am using PackageReference instead of packages.config. Is this a bug with PackageReference?

不,这不是 PackageReference 的错误。根据文档 Transforming source code and configuration files,前两行:

For projects using packages.config, NuGet supports the ability to make transformations to source code and configuration files at package install and uninstall times. Only Source code transformations are applied when a package is installed in a project using PackageReference.

我们可以知道packages.config支持对源代码和配置文件进行转换的能力,但是仅应用源代码转换到 PackageReference。这就是为什么您无法使用 PackageReference.

完成该工作的原因