c# - 基于云pubsub运行c#示例项目时的依赖问题

标签 c# .net nuget google-cloud-pubsub

我正在努力将 Google Cloud PubSub 集成到一个示例 c# 项目中,我是 c# 的新手,因为这可能是我将在公司工作的唯一 c# 项目,因为与用 编写的游戏集成有一些要求C#。 我使用 NuGet 安装 Google.Cloud.PubSub.V1.0.0-beta13 并且安装成功,但是当我尝试运行使用文档创建的示例代码时,出现以下错误:

C:/Users/MyUser/RiderProjects/TestConsole/TestConsole/bin/Debug/TestConsole.exe

Unhandled Exception: System.IO.FileLoadException: Could not load file or assembly 'Google.Apis.Auth, Version=1.21.0.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at Google.Api.Gax.TaskExtensions.WaitWithUnwrappedExceptions(Task task) in C:\Users\jon\Test\Projects\gax-dotnet\releasebuild\src\Google.Api.Gax\TaskExtensions.cs:line 48
   at Google.Api.Gax.Grpc.ChannelPool.GetChannel(ServiceEndpoint endpoint) in C:\Users\jon\Test\Projects\gax-dotnet\releasebuild\src\Google.Api.Gax.Grpc\ChannelPool.cs:line 92
   at Google.Cloud.PubSub.V1.PublisherClient.Create(ServiceEndpoint endpoint, PublisherSettings settings) in C:\Users\jon\Test\Projects\google-cloud-dotnet\releasebuild\apis\Google.Cloud.PubSub.V1\Google.Cloud.PubSub.V1\PublisherClient.cs:line 558
   at TestConsole.Program.CreateTopic(String projectId, String topicId) in C:\Users\MyUser\RiderProjects\TestConsole\TestConsole\Program.cs:line 11
   at TestConsole.Program.Main(String[] args) in C:\Users\MyUser\RiderProjects\TestConsole\TestConsole\Program.cs:line 32

然后我尝试将 Google.Apis.Auth 降级到 1.21.0,但随后问题转移到“无法加载 Google.Api.Gax,版本 = 1.0.1.0”,然后(如果我继续降级依赖项)在 Google 上。 Protobuf 3.2.0.0,然后在 Google.Apis.Core 1.24.1 上,然后返回“无法加载 Google.Apis.Auth 1.21.0”,所以我猜问题出在其他地方。

是什么导致了这个依赖性问题?如果我从 Github 加载 Google Pubsub 示例项目,即使 packages.config 与我项目中的相同,我也不会遇到任何问题。

这是我的 Program.cs:

using Google.Cloud.PubSub.V1;
using Google.Protobuf;

namespace TestConsole
{
    internal class Program
    {

        public static object CreateTopic(string projectId, string topicId)
        {
            var publisher = PublisherClient.Create();

            var topicName = new TopicName(projectId, topicId);
            var message = new PubsubMessage
            {
                // The data is any arbitrary ByteString. Here, we're using text.
                Data = ByteString.CopyFromUtf8("Hello Cloud Pub/Sub!"),
                // The attributes provide metadata in a string-to-string
                // dictionary.
                Attributes =
                {
                    { "description", "Simple text message" }
                }
            };
            publisher.Publish(topicName, new[] { message });
            return 0;
        }


        public static void Main(string[] args)
        {
            CreateTopic("MyProjectID", "MyProjectTopic");
        }
    }
}

和我的 packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Google.Api.CommonProtos" version="1.0.0" targetFramework="net452" />
  <package id="Google.Api.Gax" version="1.0.1" targetFramework="net452" />
  <package id="Google.Api.Gax.Grpc" version="1.0.1" targetFramework="net452" />
  <package id="Google.Apis" version="1.24.1" targetFramework="net452" />
  <package id="Google.Apis.Auth" version="1.24.1" targetFramework="net452" />
  <package id="Google.Apis.Core" version="1.24.1" targetFramework="net452" />
  <package id="Google.Cloud.Iam.V1" version="1.0.0-beta09" targetFramework="net452" />
  <package id="Google.Cloud.PubSub.V1" version="1.0.0-beta09" targetFramework="net452" />
  <package id="Google.Protobuf" version="3.2.0" targetFramework="net452" />
  <package id="Grpc.Auth" version="1.4.0" targetFramework="net452" />
  <package id="Grpc.Core" version="1.4.0" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="10.0.2" targetFramework="net452" />
  <package id="System.Interactive.Async" version="3.1.1" targetFramework="net452" />
  <package id="System.Net.Http" version="4.3.1" targetFramework="net425" />
  <package id="Zlib.Portable.Signed" version="1.11.0" targetFramework="net452" />
</packages>

我使用 Rider 2017.1.1 运行我的项目,并在 .NET Framework 4.5.2 上运行它。

请注意,我已经知道这个 URL Unable to run Google Cloud PubSub in c#, DLL problems 上已经发布了一个非常相似的问题。但由于我的低“声誉”我不能评论它(你知道,我通常会尝试阅读文档并搜索已经回答的问题并尽量避免创建重复项,这就是为什么我没有在这方面建立很高的声誉网站)和提出问题的人在不知道如何解决问题的情况下自己解决了这个问题。 答案中写着:

...if you manage all the dependencies via NuGet, I'd expect it to be okay - it should add assembly binding redirects for you.

在我看来我已经在做了。

最佳答案

尝试重新开始:通过在 Nuget 包管理器控制台中运行此命令来清除所有 Google 依赖项:

PM> get-package | where {$_.Id -like 'Google*'} | % { uninstall-package -Force $_.Id -ProjectName $_.ProjectName}

然后再次安装 PubSub:

PM> install-package Google.Cloud.PubSub.V1 -pre

关于c# - 基于云pubsub运行c#示例项目时的依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46094690/

相关文章:

c# - 'Button32_Click' 没有重载匹配委托(delegate) 'system.eventhandler'

nuget - 从 packages.config 安装私有(private)提要 Nuget 包

c# - EntityFrameworkCore.Tools 的 NuGet 包更新错误

c# - 在循环中使用 Microsoft.MSHTML,内存泄漏

.net - "Detected package downgrade"警告是什么意思?

C# app.config 问题 - ConfigurationErrorsException : Unrecognized element 'setting'

C# 查找所有没有泛型类型的类实现接口(interface)

c# - WCF 服务中添加的新功能未在客户端上显示

c# - 表单获得焦点时发生的事件

C# 在类本身中为同一个类创建对象