我刚刚创建了一个自定义 nuget 包,目的是打包我们的 Devart dll,我们在所有项目中都有适当的版本控制和更新机制。
Nuget 包的结构是根据官方 wiki上的说明进行的,如下所示:
- 德瓦特甲骨文
- 内容
- web.config.transform
- 库
- 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>
问题
当我执行合并到一个不存在或空<assemblyBinding>
部分的 web.config 时,一切都按预期工作,但是当我有 - 比如说 - 已经存在以下内容时:
<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 员工和活跃的 NuGet 开发人员在 Twitter 上发布了一个更新,可能值得在这里分享信息: https ://twitter.com/dotnetjunky/status/266533404143656960