Mik*_*ery 42 .net c# dll c#-7.0
我有一个VS2017项目编译成一个DLL,然后由其他人编写的EXE调用.这两个项目都针对.Net Framework 4.6.2.我重写了我的一个DLL方法来返回一个元组,并导入了相关的NuGet包.当我编译项目时,它在输出目录中包含System.ValueTuple.dll,然后将其部署到我的DLL加载并由EXE调用的其他机器上.但是当EXE尝试调用返回元组的方法时,它会崩溃:
意外错误无法加载文件或程序集'System.ValueTuple,Version = 4.0.1.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'或其依赖项之一.该系统找不到指定的文件.
我不明白为什么它找不到文件,因为它和我的DLL在同一个文件夹中.显然,MS没有在.Net Framework 4.6.2中包含此程序集.
请注意,我的DLL使用machine.config文件在Windows中注册.我猜测,如果我也将System.ValueTuple.dll添加到这个文件它将工作(尚未尝试,不知道这是最好的方法,特别是长期.)有更好的方法,除了等待4.6 .3并希望它包括这个组件?
Dje*_*sen 27
我自己就是这个问题.在开发时不在Localhost上,但仅在生产服务器上.最后,结果发现.Net Framework 4.6.1与我之间存在某种冲突,在4.5.0版本中从Nuget安装了System.ValueTuple.
解决方案原来是将System.ValueTuple Nuget软件包降级到4.3.0.然后它起作用,就像从来没有任何问题一样.
我怀疑这只发生在生产服务器上,导致安装了不同版本的.net框架.
Rob*_*sey 19
好的,这感觉完全不对,但是我剪了
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
这从我的主要应用程序的web.config中出来。
我真的只是在查看发生了什么,看是否有潜在的依赖项或某些东西,而不希望它运行。它只是继续工作,最近几天我添加的所有新功能仍然有效。
小智 18
添加 Robin 对仅更改 Web.config 的回答。我只需要注释掉绑定重定向标签就可以逃脱惩罚。
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<!--<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />-->
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
这为我消除了错误。
FWIW,我在使用Moq的测试项目中遇到了这个问题.有人将项目设置为.NET 4.7,但我在4.6.2.不想转向4.7,解决方案是将版本降级为Moq 4.7.145.System.ValueTuple v 4.3.1与它一起工作.
当nuget包版本不匹配时,我遇到了同样的异常.(在主程序4.3.0中使用的DLL是4.3.1.)我已经通过将软件包升级到相同的版本来解决了这个问题...检查和统一软件包版本也可能对你有所帮助.
我通过在计算机的machine.config文件中注册System.ValueTuple(以及已经在此处注册的我自己的DLL)解决了此问题。我并不特别喜欢这种方法,因为它取决于DLL版本,该版本随时可能更改。希望MS可以将此程序集添加到.Net Framework的下一版本中。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" />
<bindingRedirect oldVersion="0.0.0.0-99.99.99.99" newVersion="4.0.1.0" />
<codeBase version="4.0.1.0" href="e:\exec\System.ValueTuple.dll" />
</dependentAssembly>
...
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
通过.NET Framework 4.7.2 Runtime在机器上安装错误来解决它。简单,无需添加bindingRedirect或降级NuGet软件包。
https://dotnet.microsoft.com/download/dotnet-framework/net472