我正在努力将Google Cloud PubSub集成到一个示例c#项目中,我是c#的新手,因为这可能是我在公司工作的唯一一个c#项目,因为有一些要求集成一个用C#。 我使用NuGet安装 Google.Cloud.PubSub.V1.0.0-beta13 并且安装成功,但是当我尝试运行使用docs创建的示例代码时,我收到以下错误:
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上运行它。
请注意,我已经知道此网址Unable to run Google Cloud PubSub in c#, DLL problems已经发布了一个非常相似的问题,但由于我的声誉很低而且#34;我无法评论它(你知道,我通常会尝试阅读文档并搜索已经回答的问题,并尽量避免创建重复项,这就是为什么我不能在这个网站上建立高声誉)和提出问题的人在不知道如何解决问题的情况下为自己解决了问题 在答案中写道:
...如果您通过NuGet管理所有依赖项,我希望它没问题 - 它应该为你添加装配绑定重定向。
在我看来,我已经在做了。
答案 0 :(得分:1)
重新开始:在Nuget Package Manager控制台中运行此命令,清除所有Google依赖项:
PM> get-package | where {$_.Id -like 'Google*'} | % { uninstall-package -Force $_.Id -ProjectName $_.ProjectName}
然后再次安装PubSub:
PM> install-package Google.Cloud.PubSub.V1 -pre
答案 1 :(得分:0)
在Jeffrey的建议之后我开始用Visual Studio执行我的项目,我发现它不会触发依赖项错误。 所以,这似乎是Rider的一个问题。 我可能会问JetBrains澄清,但如果有人有更好的答案,请发表您的意见。