우리는 몇 가지 COM 라이브러리 (예 : AutoIT)를 참조하는 C# 응용 프로그램을 개발 중입니다.빌드 서버에 COM 참조 된 DLL 등록
소스 제어하에 참조 된 모든 구성 요소를 타사 "Libs"폴더에 포함합니다.
문제는 COM dll에 .csproj 파일에 HintPath 속성이 없기 때문에 regsvr32 (또는 일종의 스크립트 사용)를 사용하여 수동으로 등록해야한다고 가정합니다.
현재 모든 빌드 전에 실행되는 MSBuild 스크립트를 만드는 중입니다. 그러나 수동으로 regsvr32.exe를 호출해야하는지 또는 미리 정의 된 MSBuild 작업을 사용해야하는지 알 수 없습니까?
현재이 내가 테스트로 attmpted 한 것입니다 :
는<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<MyAssemblies Include="D:\*.dll" />
</ItemGroup>
<Target Name="Build">
<RegisterAssembly
Assemblies="@(MyAssemblies)" >
</RegisterAssembly>
</Target>
</Project>
이 내가 지정한 폴더에 저장 한 DLL을 유효 DLL을하지 않은 것으로 오류를 생성합니다.
이 문제를 해결하는 좋은 방법은 무엇입니까?
편집 : COM DLL을가 .csproj 파일에이 비슷한이 참조
프로젝트 :
<COMReference Include="AutoItX3Lib">
<Guid>{F8937E53-D444-4E71-9275-35B64210CC3B}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
이 다른 관리되는 어셈블리와 같은 힌트 경로를 포함하지 않습니다 빌드 서버에 이렇게 , 참조 된 COM DLL을 찾을 수 없습니다.
REGSVR32를 사용하여 빌드 서버에 COM dll을 등록하면 빌드가 성공합니다.
형식 라이브러리와 interop 어셈블리가 모두 내 소스 제어 (Git)에 체크되어 있습니다. interop을 참조하는 것만으로는 충분하지 않습니다. Tlbimp의 결과는 무엇입니까? 내가 대신 빌드 프로세스의 일부로 오히려 정면보다 빌드 env를 업그레이 드하기 때문에, 나는 모든 스크립트를 복사하고 더 많은 서버로 확장 할 수 있으며, 모든 로직을 전제 조건 단계없이 저장할 수 있습니다. –
Tlbimp의 출력은 다음과 같습니다. interop 어셈블리 나는 "충분하지 않다"로 무엇이든 할 수 없다. 당신이 더 잘하는 빌드 오류를 설명해야 할 것이다. –
원래 질문을 업데이트했습니다. Interop dll은 "dependencies"폴더에 있지만 .csproj와이 파일을 연결하지 않으므로 빌드가이 파일을 선택하지 않습니다. 내 dev envinronment에,이 원래 설치되어있는 소프트웨어 패키지 (AutoIt 예를 들어),하지만이 서버에 설치되어 있지 않습니다 및 그래서 빌드 전에 몇 가지 추가 단계를 수행하지 않고 실패합니다. –