我试图通过自定义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作为我的包管理格式。
答案 0 :(得分:1)
在Visual Studio 2017(15.6.4)中,将NuGet包添加到具有现有vanilla App.config文件的全新控制台应用程序时,不会发生转换。
你是什么意思“没有发生变革”? appSetttings
部分下的新元素和属性未合并到App.config
?
我已使用您的.nuspec
和app.config.transform
文件创建了nuget包:
nuget package:https://1drv.ms/u/s!Ai1sp_yvodHf1QFNsI3ybdw2nanD
然后将其设置为我的本地Feed,创建一个新的.net控制台应用程序并将该nuget包添加到测试项目中,您会发现appSetttings
部分下的新元素和属性已合并到{{ 1}},所以App.config
在安装nuget包后会是这样的:
App.config
所以应该可行。一种可能是安装此软件包时没有清理缓存,为了确认这一点,请删除解决方案文件夹下的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
来完成这项工作的原因。