我有一个在项目上应用 app.config 转换的包。转换文件看起来像这样
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="handlerId" value="$assemblyname$"/> <!--populate from project params-->
<--other params-->
</appSettings>
</configuration>
案例是:将包添加到没有app.config的新项目中,手动更新项目中的app.config,然后更新包。
如果我将 app.config.transform 包含到我的包中,nuget 会在项目中创建 app.config,但是如果我更改参数之一的值并更新/重新安装包,它会使用包的值创建该参数的副本,而不是跳过它。
例如:在干净的项目上安装的包
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="handlerId" value="MyApp"/>
</appSettings>
</configuration>
然后将 handlerId 值更改为MyApp1
并更新包。变换的结果是
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="handlerId" value="MyApp1"/>
<add key="handlerId" value="MyApp"/> <!--shouldn't appear!-->
</appSettings>
</configuration>
我尝试改用 xdt 转换。它们在使用 app.config 更新包或在项目上安装包时效果很好,但如果没有 app.config,nuget 不会创建它。