c#app在dev-box上工作,部署时有dll冲突(哦,不,不再)

本文关键字:冲突 不再 dll dev-box 工作 c#app 部署 | 更新日期: 2023-09-27 18:15:00

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

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

第二个是spring.social-nuget决定使用net20库(它使用的是spring.rest的net40客户端(,这在dev上运行良好,但他们(spring.social库(决定在prod框上需要spring.rest.dll的net20版本。如果我将csproj更改为使用net40 spring.social libs,我就无法编译,因为很明显,即使在同一版本中,它们也不相同(使用net20 dll的两个函数调用链接失败(。如果我把spring.est改为net20,我就不能编译了,所以这不是一个选项。

它们并不是强命名的(当然(,而且它们确实是相同的版本和架构,所以如果我想的话,我甚至不确定我是否可以将它们放在GAC中。我确实尝试过将两个版本都放在GAG中,但尽管我的MSI没有出现安装程序错误,但它也只是没有将具有相同名称的libs放进去(我几乎把它们都放在那里只是为了搞笑,其余的都成功了(。该应用程序将在一个专用的盒子上运行,所以我"拥有"它的一切,可以对它做各种"正常"用户应用程序中禁止做的坏事,但这个小圈子让我感到困惑。

为了追踪开发盒上正在运行的内容(看看它是否正在访问其他位置来查找libs(,我尝试了DepencyWalker(视情况而定(,但由于所有内容都是延迟加载的,所以它没有太大作用,即使是评测,因为当它到达入口点时就会停止。我试过fuslogvw,但common.logging和spring.est都没出现?我在fuslogvw中看到的唯一nuget包是spring.social.twitter和newtonsoft.json,它们都是按预期从我的bin文件夹中加载的。由于我没有想法,我转向了很棒的SO社区。接下来有哪些好的步骤?

谢谢,Greg

c#app在dev-box上工作,部署时有dll冲突(哦,不,不再)

生产和开发机器上的.config文件很可能不同。如果dev .config文件包含一个bindingRedirect,而您的生产.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