1

我的应用程序使用 Nuget 包,包括 Spring.rest 和 spring.social.twitter。部署时会出现两个奇怪的库(部署几乎只是安装 .net45 框架,然后通过 WIX 将我的发布文件夹中的所有内容安装到另一台机器上)。

第一个奇怪的是,Nuget 在我的开发盒上安装了 common.logging 2.1.2(由 spring.rest 使用),但是当 spring.rest 在 prod 盒上加载时,它正在寻找 2.0.0。不知道为什么,因为我的开发盒上什至没有 2.0.0,但我可以下载该版本并将其复制到 prod 上,然后通过那个版本。

第二个是 spring.social - nuget 决定使用 net20 库(它对 spring.rest 使用 net40-client),它在 dev 上运行良好,但他们(spring.social 库)决定他们需要 net20 版本产品盒上的 spring.rest.dll。如果我将我的 csproj 更改为使用 net40 spring.social 库,我将无法编译,因为显然它们即使在同一版本中也不相同(使用 net20 dll 的两个函数调用上的链接失败)。如果我将 spring.rest 更改为 net20,我再次无法编译,所以这不是一个选项。

它们的名称并不严格(当然),它们实际上是相同的版本和相同的架构,所以如果我愿意的话,我不确定是否可以将它们放入 GAC。我确实尝试将这两个版本都放在 GAC 中,但是虽然我的 MSI 没有收到安装程序错误,但它也没有将具有相同名称的库放入(我把几乎所有的库都放在那里是为了咯咯笑,其余的都有效)。该应用程序将在专用的盒子上运行,所以我“拥有”它的一切,并且可以对它做各种邪恶的事情,这在“普通”用户应用程序中会被禁止,但这个小小的乐趣圈让我感到困惑。

试图追踪开发盒上正在运行的内容(以查看它是否可能正在到达其他位置以查找库),我尝试了 DepencyWalker(取决于),但由于所有内容都是延迟加载的,它并没有做太多,即使使用分析,因为它在到达入口点时停止。我尝试了 fuslogvw,但 common.logging 和 spring.rest 甚至没有出现?我在 fuslogvw 中看到的唯一 nuget 包是 spring.social.twitter 和 newtonsoft.json,它们都按预期从我的 bin 文件夹中加载。由于我没有想法,我正在转向精彩的 SO 社区。接下来有哪些好的步骤?

谢谢,格雷格

4

1 回答 1

0

很可能.config生产和开发机器上的文件不同。如果开发.config文件包含 abindingRedirect而您的产品.config不包含,这可能是观察到的行为的原因。

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

http://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.71).aspx

于 2013-05-30T10:00:13.930 回答