2 개의 어셈블리에 유형이 있습니다.
두 개의 다른 타사 COM DLL에서 두 개의 .NET Interop 어셈블리를 만들었습니다. 두 COM DLL 모두 COMMONTYPE. 따라서 COMMONTYPE이제 두 개의 Interop 어셈블리를 통해 노출됩니다.
이 두 Interop 어셈블리를 사용해야하는 세 번째 프로젝트가 있는데 악명 높은 컴파일 시간 오류가 발생합니다.
유형
<ABC>은<ASSEMBLY1.dll>및<ASSEMBLY2.dll>
COM DLL은 타사 공급 업체에서 제공하므로 소스 코드에 대한 액세스 권한이없고 C # 콘솔 응용 프로그램을 작성하고 있습니다. 즉, debug=false해결 방법을 추가 할 수있는 web.config 파일이 없습니다 . 어떡해?
나는 이것이 오래되었다는 것을 알고 있지만 나열된 것보다 쉬운 방법이 있습니다. 이는 이름과 네임 스페이스 가 정확히 동일한 형식을 공유하는 두 개의 어셈블리 를 참조 할 때 작동 합니다.
Reference to your DLL을 마우스 오른쪽 버튼으로 클릭하고 Propeties를 선택하면 여기에 "Aliases"라는 속성이 표시됩니다.
기본값은 "global" 입니다. 충돌하는 어셈블리 중 하나의 경우이 값을 다른 값으로 변경합니다. 아래 예에서는 "global"에서 "destination"으로 변경했습니다.
다음으로 코드 파일에서 extern 키워드 를 사용하여이 별칭 을 이러한 유형 의 루트 수준 네임 스페이스 로 사용해야합니다 . 이 예제에서는 .cs 파일의 맨 위에 다음을 배치합니다.
extern alias destination
이제이 파일 내에서 두 유형을 모두 참조 할 수 있습니다.
extern alias destination;
namespace Test
{
public static class TestClass
{
public static void Success()
{
var foo = destination::Some.Duplicate.Namespace.SomeDuplicateType();
var bar = Some.Duplicate.Namespace.SomeDuplicateType();
}
}
}
공급 업체의 네임 스페이스가 동일하지 않은 경우 (가능성이 낮음) 유형 정의는 실제로 해당 시점에서 분리됩니다. 여러분이해야 할 일은 (때로는 완전한 PITA이기도합니다) 단순히 carte blanche 문을 적용하는 대신 using 문에 네임 스페이스 별칭을 만드는 것입니다. 이렇게하면 네임 스페이스를 다시 식별 할 수 있습니다.
using Vendor1 = Vendor.Namespace;
using Vendor2 = OtherVendor.Namespace;
...
Vendor1.COMMONTYPE blah = new Vendor1.COMMONTYPE();
Vendor2.COMMONTYPE blah2 = new Vendor2.COMMONTYPE();
이는 이러한 공급 업체의 각 네임 스페이스에있는 모든 유형에 특정 별칭을 사용하는 것을 의미합니다.
이전 질문이지만 더 쉬운 옵션을 찾았습니다 ... 사용하려는 참조를 선택하세요 ... 속성 아래에서 별칭을 'xyz'로 변경하세요. 이제 코드 줄에서 맨 위에 추가합니다.
extern alias xyz;
그런 다음 다음을 사용하여 추가하십시오.
using xyz.VENDOR2.Type;
또는 다음을 사용하는 다른 사용 방법 :
using OtherNameSpace = xyz.VENDOR2.Type;
이제 아래와 같이 명시 적으로 참조를 사용할 수 있습니다.
var abc = new xyz.VENDOR2.Type.abc();
또는
var abc = new OtherNameSpace.abc();
다른 네임 스페이스 및 / 또는 유형에 대한 별칭을 사용할 수 있습니다.
다음과 같이 표시됩니다.
using other = sssssss.a;
namespace ConsoleApplication1
{
public class a
{
public string ff { get; set; }
}
class Program
{
static void Main(string[] args)
{
other s = new other();
a b = new a();
}
}
}
namespace sssssss
{
public class a
{
public string ff { get; set; }
}
}
어쩌면 당신은 변경하여, 그것을 속일 수있는 namespace하나의이 경우 정규화 된 이름으로, 어셈블리 중 하나를 COMMONTYPE서로 동일하지 않으며, 아마도 그것은 충돌이 3 DLL에서 발생하여 문제를 해결할 수 있습니다.
도움이 되었기를 바랍니다.
참고 URL : https://stackoverflow.com/questions/9194495/type-exists-in-2-assemblies
'Nice programing' 카테고리의 다른 글
| Firestore로 "객체 배열"을 업데이트하는 방법은 무엇입니까? (0) | 2020.11.26 |
|---|---|
| 콘솔 응용 프로그램에서 winform을 실행하는 방법은 무엇입니까? (0) | 2020.11.26 |
| 부트 스트랩 탭 내용에 테두리를 지정하는 방법 (0) | 2020.11.26 |
| WHERE 절에서 SELECT 문을 사용하여 SQL DELETE 문을 작성하는 방법은 무엇입니까? (0) | 2020.11.26 |
| Jackson ObjectMapper-객체 속성의 직렬화 순서 지정 (0) | 2020.11.26 |
