【发布时间】:2017-08-09 14:18:41
【问题描述】:
我有一个 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 并希望它包含这个程序集?
【问题讨论】:
-
"请注意,我的 DLL 是使用 machine.config 文件在 Windows 中注册的" - 您的意思是您的 DLL 被放入 GAC,但 System.ValueTuple.dll 不是?我知道这会导致什么问题。
-
@JonSkeet 是的。但我假设 Windows 会在与调用应用程序相同的文件夹中查找引用的 DLL,在本例中是我的 DLL。
-
DLL的路径对查找程序集没有作用,只有启动EXE。
-
ValueTuple 内置于 .NET Framework 4.7 中,该版本刚刚宣布并将很快发布。也就是说,我不明白您为什么在 4.6.2 中遇到问题,因为您从 nuget 导入了 ValueTuple 包。我不是装配绑定方面的专家,但您的解决方案(如下)让我担心。随意在 rolsyn repo 上提交一个小型 repro 项目(压缩)的问题。
-
我在更新(看似无关的)Nuget 包后遇到了同样的问题。升级到 4.7.2 解决了这个问题,但我还必须删除绑定引用。
标签: c# .net dll c#-7.0 valuetuple