来自NuGet Package的App.config XML转换

时间:2018-04-04 15:04:28

标签: visual-studio nuget nuspec

我试图通过自定义NuGet包跟踪these instructions对目标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>

运行content时,这会将文件正确插入.nupkg文件的nuget pack文件夹中。

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

有人可以告知为什么转型没有发生?

更新

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

1 个答案:

答案 0 :(得分:1)

  

在Visual Studio 2017(15.6.4)中,将NuGet包添加到具有现有vanilla App.config文件的全新控制台应用程序时,不会发生转换。

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

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

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

然后将其设置为我的本地Feed,创建一个新的.net控制台应用程序并将该nuget包添加到测试项目中,您会发现appSetttings部分下的新元素和属性已合并到{{ 1}},所以App.config在安装nuget包后会是这样的:

App.config

enter image description here

所以应该可行。一种可能是安装此软件包时没有清理缓存,为了确认这一点,请删除解决方案文件夹下的packages文件夹。

注意:

请注意,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> 部分,它只是通过添加新元素和属性将新条目合并到其中。 NuGet不会更改任何现有元素或属性。

<强>更新

  

当执行与您完全相同的步骤时,这对我不起作用,但我使用的是PackageReference而不是packages.config。这是PackageReference的错误吗?

不是,它不是startup的错误。根据文件Transforming source code and configuration files,前两行:

  

对于使用packages.config的项目,NuGet支持在程序包安装和卸载时对源代码和配置文件进行转换的功能。使用PackageReference在项目中安装包时,仅应用源代码转换。

我们可以知道packages.config支持对源代码和配置文件进行转换的能力,但是只有源代码转换应用于PackageReference 。这就是为什么你不能用PackageReference来完成这项工作的原因。