nuget web.config.transform奇怪地合并了依赖设备部分



我刚刚创建了一个自定义的nuget软件包,其目标是包装我们的Devart Dlls S.T.我们在所有项目中都有适当的版本控制和更新机制。

Nuget软件包的结构是根据官方Wiki上的说明,看起来如下:

  • devartoracle
    • 内容
      • web.config.transform
    • lib
      • devart.data.oracle.dll
      • ...
    • devartoracle.nuspec

NUSPEC文件的内容或多或少是以下内容:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>DevartOracle</id>
    <version>6.70.311-pre6</version>
    <title>Devart Oracle dotConnect</title>
    ...
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Drivers from Devart for Oracle and Entity Framework</description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2012</copyright>
    <tags></tags>
    <dependencies>
    </dependencies>
  </metadata>
</package>

实际上没什么特别的。我使用以下命令将Nuget软件包发布到我们本地存储库:

nuget pack DevartOracle.nuspec

dll的安装良好,但是我也想创建一个web.config合并。因此,我按照文档中指定的web.config.transform文件添加了以下内容:

 <?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="Devart.Data.Oracle" publicKeyToken="09af7300eec23701" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-6.70.311.0" newVersion="6.70.311.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    <system.data>
      <DbProviderFactories>
        <remove invariant="Devart.Data.Oracle" />
        <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=6.70.311.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
      </DbProviderFactories>
    </system.data>
  </configuration>

问题

当我将合并执行到Web.config中时,使用不存在或空的<assemblyBinding>部分,一切都按预期工作,但是当我已经存在时,我已经存在了follwing内容:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

然后合并的结果是这个奇怪的:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      <assemblyIdentity name="Devart.Data.Oracle" publicKeyToken="09af7300eec23701" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.70.311.0" newVersion="6.70.311.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

任何想法??


更新:

Microsoft员工和Active Nuget Developer在Twitter上发布了一个更新,可能值得在此处分享以信息:https://twitter.com/dotnetjunky/status/26653404143656960

按设计,nuget仅允许附加更改对现有XML文件(合并适用于类型XML的任何文件,只要扩展名,您要合并的文件使用{filename}的约定命名。{extension} .transform)。

这是因为nuget还需要能够卸载包装安装所做的更改(除非您在安装后对更改的文件进行了修改,否则Nuget将不会将其放在上面卸载)。

这与您对XML配置变换的期望大不相同,这可能会引起这里的混乱。

如果您想要 real 在目标文件上转换,则必须在PowerShell路线上进行powershell路线,并在软件包的工具文件夹中拼写install.ps1和uninstall.ps1文件。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>

最新更新