2011-08-01 4 views
2

VS 2010에서 생성 된 C++ DLL 프로젝트가 있습니다. COM (ATL)로 노출되어 있습니다. 이 DLL을 다른 .NET 프로젝트에 참조로 사용했습니다. 다음과 같이 C++ 프로젝트 링커 설정은 설정 : 나는 2010 년 C++ 프로젝트가 잘 구축 TFS에서이 두 프로젝트를 빌드 할 수있는 빌드 정의를 생성하지만, C++ 프로젝트의 출력 DLL이 등록되어 있지 않기 때문에 .NET 프로젝트가 실패 COM DLL 등록이 TFS 2010에서 실패했습니다

 
­"Register Output" = Yes 
"Per-user Redirection = Yes 

. "Per-User redirection"= false로 설정하면 작동하지 않습니다. 또한 WF 액티비티 'InvokeProecss'를 사용하여 Regsrv32/배치 파일/내 자신의 exe 등을 사용하여 C++ DLL을 등록하려고했지만 종료 코드는 5가되었습니다. TFS 2010은 Windows 2008 Server R2에 있습니다. 그리고 저는 관리자로서 프로세스를 실행하지 않고 있다고 생각합니다.

tlbimp를 사용하여 interop dll을 생성 한 다음 .NET proejct에서이 interop을 참조하면 tfs 빌드에서 oviously tlb를 호출하는 InvokeProecss를 추가해야합니다. 그러나 우리의 일반적인 관행은 .NET proejct에서 직접 COM dll을 참조하는 것이므로 허용되지 않습니다.

아무도 도와 드릴 수 있습니까?

사용자 이름/암호를 묻지 않고 관리자로 tfs 자동화 빌드 활동 'InvokeProcess'를 실행할 수 있습니까?

+2

COM dll을 직접 참조 할 수 없으므로 항상 tlbimp.exe가 필요합니다. 빌드 서버에 COM 서버를 등록하는 것은 레지스트리 오염 만 일으킬 수있는 끔찍한 방법입니다. 그리고 필요하지 않습니다. tlbimp.exe를 실행하면 관리자 권한이 필요하지 않습니다. –

답변

2

기본적으로 TFS 빌드 서비스는 비교적 낮은 권한의 계정 인 "네트워크 서비스"계정으로 실행됩니다. 또는 원하는 도메인 계정으로 실행되도록 구성 할 수 있습니다. 그러나 당신이 설명하는 문제에 대한 해결책으로 추천하지는 않을 것입니다. 이 경우 Hans와 마찬가지로 형식 라이브러리 가져 오기 도구 (TlbImp.exe)를 사용하여 관리되는 어셈블리에서 COM 서버를 "참조"하는 것이 더 낫습니다.

COM 개체가 변경되지 않으면 형식 라이브러리 가져 오기 도구를 사용하여 interop 어셈블리를 생성하고이를 .NET 프로젝트에서 확인하고 참조 할 수 있습니다. 으로 변경되면 빌드 후 단계를 추가하여 InvokeProcess 작업을 사용하지 않고 interop 어셈블리를 생성 할 수 있습니다. 한스가 지적했듯이 실제로 관리 대상 어셈블리에서 COM 개체를 참조 할 수는 없습니다. 참조는 실제로 등록 된 COM 서버에 대한 참조를 확인한 후 빌드 할 때 interop 어셈블리가 생성되도록합니다.

+0

여러분, tfs가 COM을 등록 할 수 있도록 도메인 사용자 중 하나를 사용하여 프로세스를 마침내 실행 시켰습니다. 나는 Hans 역시 동의하지만, tlbimp와 잘 동작한다고 언급했지만, tlbimp를 사용하여 interop을 만드는 대신 COM 프로젝트를 컴파일하고 .NET 프로젝트로 직접 언급하는 것은 개발자들입니다. 어쨌든 .. 너의 모든 도움에 많은 감사를 표한다. –

관련 문제