我正在尝试构建一个 BigQuery 应用程序,但我遇到了一个障碍。(这是一个 .Net 4.6 控制台应用)
我已经安装了NuGet包Google.Cloud.BigQuery.V2
(v1.3.0),它安装了大量依赖项,其中一个是System.Net.Http。
我修改了此处的示例代码,以针对测试 BigQuery 数据库运行简单的查询。
当BigQueryClient client = BigQueryClient.Create(projectId);
被执行时,我得到一个运行时FileNotFoundException告诉我System.Net.Http 4.1.1.3 cannot be found
和内部异常说System.Net.Http 4.0.0.0 cannot be found
。
我已经多次卸载并重新安装了System.Net.Http NuGet包,使用不同的版本,我仍然得到相同的结果。我甚至只是使用了常规的.Net 4.6 System.Net.Http dll并遇到了同样的问题。
如果我通过NuGet包管理器将System.Net.Http版本更改为4.0.0,则在同一点得到不同的FileNotFoundException,但这次它说找不到Google.Api.Gax 2.7.0.0
,内部例外说它找不到Google.Api.Gax 2.5.0.0
。任何版本的Google.Api.Gax
都会发生相同的结果,除非我将Google.Api.Gax
包降级到 2.5.0.0,我仍然会收到运行时错误,说缺少Google.Api.Gax 2.7.0.0
,但这次没有内部例外提到Google.Api.Gax 2.5.0.0
什么给?我过去有过参考问题,但从来没有像这样
经过数小时的更改 NuGet 包版本的反复试验,并取得了一些小的成功,我最终发现某些 DLL 没有复制到我的单元测试项目的 bin 文件夹中,因此出现了运行时错误。
每次将 DLL 从类库的 bin 文件夹复制到单元测试的 bin 文件夹时,我都会得到另一个 DLL 丢失的 DLL 异常。在将它们一一复制后,它最终运行了。
为什么不将依赖 DLL 复制到引用类库的项目的 bin 文件夹中?
即Google.Cloud.BigQuery.V2安装在项目A中,项目B引用项目A。项目 A 中引用的 DLL 不会复制到项目 B 的 bin 文件夹中(即使"复制本地"设置为 True!
我必须手动复制的 DLL:
- System.Net.Http.dll
- Microsoft.Win32.Primitives.dll(不是
- System.Diagnostics.DiagnosticSource.dll
- System.Security.Cryptography.X509Certificate.dll Google.Apis.Bigquery.v2
- .dll(这是一个特别奇怪的问题,因为NuGet包明确建议您使用Google.Cloud.BigQuery.V2而不是Google.Apis.Bigquery.v2,但Google.Cloud.BigQuery.V2依赖于Google.Apis.Bigquery.v2)
就参考问题而言,这个问题占了上风。也许我的VS 2017副本是罪魁祸首。谁知道呢。。。?