2017-09-07 3 views
5

Google Cloud PubSub를 샘플 C# 프로젝트에 통합하기 위해 노력하고 있습니다.이 프로젝트는 내 회사에서 일하는 유일한 C# 프로젝트 일 수 있으므로 C# 초보자입니다. C#으로 작성된 게임과 통합하기위한 몇 가지 요구 사항 때문입니다.클라우드 pubsub를 기반으로 C# 샘플 프로젝트를 실행할 때 종속성 문제가 발생했습니다.

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.Cloud.PubSub.V1.0.0-beta13를 설치하는 NuGet을 사용하여 설치가 성공적으로 갔다

그런 다음 Google.Apis.Auth를 1.21.0으로 다운 그레이드하려고했지만 Google.Protobuf 3.2에서 "Google.Api.Gax, Version = 1.0.1.0을로드 할 수 없습니다"로 이동 한 다음 종속성을 계속 낮추면 문제가 발생합니다. .0.0 다음 ​​Google.Apis.Core 1.24.1에서 "Google.Apis.Auth 1.21.0을로드 할 수 없습니다."로 돌아가서 문제가 다른 곳에서 발생했을 것입니다.

이 종속성 문제의 원인은 무엇입니까? Github에서 Google Pubsub 샘플 프로젝트를로드하면 packages.config가 프로젝트의 프로젝트 패키지와 동일하더라도 아무런 문제가 발생하지 않습니다.

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> 

내 프로젝트를 실행 라이더 2017년 1월 1일를 사용하고 난이 .NET 프레임 워크 4.5에서 실행 :

여기 내 Program.cs입니다. 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.

합니다.

+0

안녕하세요! 링크 된 질문의 대답에서 마지막 제안을 시도해 보셨습니까? "[...] 또는 NuGet이 모든 종속성 처리를 수행하는 시점에서 라이브러리뿐만 아니라 응용 프로그램에서도 Google.Cloud.PubSub.V1에 대한 참조를 추가하십시오." –

+1

내가 알아챈 또 다른 세부 사항은'''beta13'''을 질문하는 것이지만,''''beta09'''는''packages.config''' 파일에서 참조됩니다. 버전 불일치가있을 수 있습니까? –

+1

안녕하세요 @MarcelloRomani 다른 버전으로 시도했기 때문에 불일치는 아마 내가 처리하려고 시도한 다른 방식의 남은 부분이었을 것입니다. 또한 앱에 이미 참조를 추가했지만 라이브러리에 추가하는 것이 무엇을 의미하는지 알지 못합니다. –

답변

0

을 제프리의 제안 후 나는 실행 시작 Visual Studio를 사용하는 프로젝트에서 종속성 오류를 유발하지 않는다는 것을 알았습니다. 라이더에게 문제가되는 것 같습니다. JetBrains에게 해명을 요청할 것입니다.하지만 누군가가 더 좋은 대답을 가지고 있다면 의견을 게시하십시오.

1

새로운 시작을 시도 Nuget 패키지 관리자 콘솔에서이 명령을 실행하여 모든 구글 종속성을 쓸어 :

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

을 그런 다음 다시 PubSub를 설치

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

안녕하세요, Nuget Package Manager Console을 언급 해 주셔서 감사합니다. 자습서를 사용할 때 항상 Powershell을 사용했는데, 그 이유는 내가 Rider에서 발견하지 못했기 때문입니다. 당신의 대답은 문제를 직접 풀지는 못했지만 Visual Studio로 프로젝트를 실행함으로써 효과를 낼 수있었습니다. 라이더에 대한 버그 일 수 있습니다 (여전히 작동하지 않습니다)? –