我有一个VS2017项目,它编译成DLL,然后由其他人编写的EXE调用.这两个项目的目标都是.Net框架4.6.2.我重写了一个DLL方法来返回元组,还导入了相关的NuGet包.当我编译这个项目时,它包含了一个系统.ValueTuple.输出目录中的dll,然后将其部署到其他机器上,在这些机器上,我的dll被EXE加载并调用.但当EXE试图调用返回元组的方法时,它会崩溃:

意外错误无法加载文件或程序集的系统.ValueTuple,Version=4.0.1.0,Culture=neutral,PublicKeyToken=CC7B13FFCD2DD51'或其依赖项之一.系统找不到指定的文件.

我不明白为什么它找不到文件,因为它和我的DLL在同一个文件夹中.显然,MS并没有把这个组件包括在内.Net框架4.6.2.

请注意,我的DLL是使用计算机在Windows中注册的.配置文件.我猜如果我也添加了系统.ValueTuple.dll到这个文件,它将工作(尚未try ,不确定这是最好的方法,尤其是长期.)除了等待4.6.3并希望它包括这个组件之外,还有更好的方法吗?

推荐答案

我通过在计算机的machine.config文件中注册System.ValueTuple(以及已经在那里注册的我自己的DLL)解决了这个问题.不过,我并不特别喜欢这种方法,因为它依赖于随时可能更改的DLL版本.希望微软能将此程序集添加到下一版本的.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>

.net相关问答推荐

从Couchbase删除_txn文档的推荐方法?""

竖线在 PropertyGroup .csproj 文件中的含义

在 WebApi 中需要 SSL?

为什么 .net 对字符串使用 UTF16 编码,但默认使用 UTF-8 来保存文件?

在生产中使用实体框架(代码优先)迁移

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

有什么方法可以使用 .NET 应用程序使用 git 吗?

哪个单元测试框架?

如何将自定义 UserControl 显示为对话框?

参数命名:文件名还是文件名?

如何将枚举值序列化为 int?

没有 @Html.Button !

如何保护我的 .NET 程序集免受反编译?

无法使用 Unity 将依赖项注入 ASP.NET Web API 控制器

使用 C# 设置全局热键

使用 lambda 表达式代替 IComparer 参数

合并两个(或更多)PDF

如何从 WCF REST 方法返回自定义 HTTP 状态代码?

在 Windows 窗体 C# 应用程序中拥有配置文件的最简单方法

WPF 中的 Application.DoEvents() 在哪里?