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
?
我已经用你的 .nuspec
和 app.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
.
完成该工作的原因
我正在尝试按照 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
?
我已经用你的 .nuspec
和 app.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
.