【问题标题】:Issue with app.config transformation upon installing on new solution在新解决方案上安装时 app.config 转换出现问题
【发布时间】:2015-01-28 23:45:18
【问题描述】:

我有一个对项目应用 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 不会创建它。

【问题讨论】:

    标签: nuget xdt


    【解决方案1】:

    .transform 过程不区分键或值属性。它们都只是属性。因此,它没有意识到您的特定更改是无关紧要的,并且不需要再次添加定义的元素。

    http://docs.nuget.org/docs/creating-packages/configuration-file-and-source-code-transformations

    当 NuGet 将转换文件合并到项目的配置中时 文件,它只添加元素或向现有元素添加属性 配置文件;它不会改变现有元素或 任何其他方式的属性。

    据 nuGet 所知,value="MyApp" 可能会定义其特定包所需的内容,如果该元素 + 属性不逐字存在,则该包将无法运行。

    【讨论】:

    • 我用 xdt 转换文件解决了这部分问题,正如我所说的。如果我可以用 xdt 创建 app.config 文件那就太好了,所以我需要一些方法来合并这些方法
    【解决方案2】:

    面临同样的问题。在我的例子中,我们的 CI 服务器构建项目时添加了重复的密钥,从而导致测试失败。

    我已经解决了这个问题,注释掉了每个元素。所以我的app.config.transform 文件是:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
         <!--add key="handlerId" value="MyApp"/-->
      </appSettings>
     </configuration>
    

    安装软件包时,用户可以取消注释新设置。

    不是一个很好的解决方案,但它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 2020-06-15
      • 2020-12-22
      • 2011-09-02
      • 1970-01-01
      • 2012-01-16
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多