2016-10-26 16 views
5

.net4.0에 C# DLL이 있지만 Microsoft.bcl, Microsoft.bcl.async, Microsoft.bcl.build를 사용하여 빌드되었습니다. , Microsoft.net.http. 이 라이브러리는 너겟에서 가져 왔습니다. 우리는 .net4.5로 옮겨 가지 않고 async를 사용하기를 원한다. 왜냐하면이 bcl 라이브러리에서 기다리고 있기 때문이다. 모든 것이 C# 프로젝트에서 잘 작동하지만, 우리는 우리의 C++ 상호 운용성 프로젝트에이 DLL을 추가 couldnt한다, 우리는이 오류를 얻을 : 우리는 프로젝트에이 참조를 추가하려고하면interop (C++ 관리) 프로젝트에서 C# dll (Microsoft.bcl로 작성) 사용

우리는이 오류가 발생합니다.

clr interop 프로젝트가 .net4.0에도 있고 DLL이 .net4.0에 추가되어 있어도이 오류가 발생합니다. 이 문제를 해결할 방법이 있습니까?

Error in text format: 
--------------------------- 
Microsoft Visual Studio 
--------------------------- 
Could not add a reference to: 

C:\xxx\xxx\xx\xxxHelper.dll 



For one of the following reasons: 

    - Targets a higher version of the .NET Framework 

    - Not a .NET assembly 

    - Not a registered ActiveX control 
--------------------------- 
OK 
--------------------------- 

코드가이 문제를 재현 : https://dl.dropboxusercontent.com/u/1967630/BCL_Problem/oAuth2_SDK_consumer_DLL/BCL_Problem_projects.zipx

+2

항상 텍스트 오류를 ​​제공하십시오. 아니 당신을 위해,하지만 stackoverflow 색인을 반복을 피하기 위해 색인 생성. C# 프로젝트가 C++ 이후에 빌드되기 때문에이 오류가 발생할 수 있습니다. C#을 먼저 빌드하고 C++을 수동으로 빌드하십시오. – eocron

+0

완료, 입력 해 주셔서 감사합니다. 아니요, 나와 관련이 없습니다. C++ 프로젝트에 대한 참조로 C# dll을 추가하려고하면이 오류가 발생합니다. – rplusg

+0

C# 및 C++ 응용 프로그램의 bitness (x86/x64)를 다르게 했습니까? – Dmitry

답변

3

나는 repro 수를 확인 벌레처럼 보인다. 스크린 샷의 오류 메시지로 판단하면 VS2013을 사용 중입니다. 매우 도움이되지 않는 메시지이지만, VS2015에서 천천히 내려 왔지만 여전히 실패합니다. 이상한 버그 btw는 C# 프로젝트가 프레임 워크 어셈블리로 사용하는 Microsoft.Threading.Task 어셈블리 참조를 처리하는 것처럼 보입니다. 내가 아는이 문제에 대한 사전 질문이 없기 때문에 대부분의 프로그래머는 기계와 싸울 필요없이이 권리를 얻습니다.

이 오류를 방지하기 위해 수행하는 방법을 고려해야합니다. 참조 추가 대화 상자에서 찾아보기 단추를 사용하는 경우에만 잘못됩니다. 그러나 대부분의 프로그래머가 솔루션 구성을 선호하는 방식 인 프로젝트 참조를 사용할 때 잘 작동합니다. 따라서 File> Add> Existing Project를 사용하여 C# 프로젝트를 선택하십시오. 그런 다음 참조를 다시 추가하지만 이번에는 찾아보기 단추를 사용하는 대신 솔루션> 프로젝트 목록에서 C# 프로젝트를 선택하십시오.

이것이 어떤 이유로 바람직하지 않은 경우이 다른 방법으로 해결할 수 있습니다. .vcxproj를 텍스트 편집기에서 열면 Notepad가 정상입니다. 이 요소를 찾으십시오.

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 

v4.5으로 수정하십시오. 이제 Browse 버튼을 사용하여 이전처럼 참조를 추가하십시오. 이번에는 불만 없습니다. 메모장으로 돌아가서 버전 번호를 v4.0으로 다시 변경하십시오.

+0

기존 버그 리포트 [here is] (https://connect.microsoft.com/VisualStudio/feedback/details/794976/in-ac-project-cannot-add-reference-to-ac-project), 상상하기 힘듭니다 유용합니다. –

+0

나는 거의 모든 옵션과 조합을 시도했지만 그다지 효과가 없었다.Microsoft 기업 연결을 통해 사례를 제출하면 도움이되지 못합니다. 그래서 나는 여기에 현상금으로 게시했다. 봐 주셔서 감사드립니다. – rplusg

0

아무 것도 도움이되지 않으면 dll을 디 컴파일하려고 시도 할 수 있습니다. .Net 어셈블리는 쉽게 뒤집을 수 있습니다.

다시 컴파일하면 문제가 해결 될 수 있습니다 (예 : nuget의 dll이 4.0이 아닌 4.5로 나타날 수 있음).

+0

Nuget의 DLL은 .net4.0입니다. 나는 디스어셈블러를 사용하고 헤더 정보는 .net 4.0이라고 말한다. – rplusg