문제

C# 프로젝트를 구축 할 때 실행하고 싶은 사용자 지정 작업이 있습니다. 이 작업은 Mytask.dll에 있으며 다른 어셈블리 Mycommon.dll을 참조합니다.

문제는 mycommon.dll이 mytask.dll에 대해 ".. common mycommon.dll"에 위치하고 있다는 것입니다. 나는 이것이 MSBuild의 로그를 분석하고 바인딩 실패에 대한 Fusion의 보고서를 보면서 실제로 문제임을 확인했습니다.

빌드 프로세스 중에 Fusion을 찾으려면 어떻게해야합니까? 어셈블리를 옮기면 내 앱이 파손되며 이에 따라 다릅니다.

업데이트 : 글쎄요, 모든 후 사본을 사용하는 것 같습니다. 다른 솔루션에는 모두 시스템 전체의 수정이 필요하며, 여기서는 실제로 보증되지 않습니다.

도움이 되었습니까?

해결책

대신 복사 하시겠습니까? 그냥 생각. 완료되면 삭제하는 빌드를 지원하기 위해 사본을 가지고 있습니다.

다른 팁

여러 솔루션이 보입니다.

1st : GAC에 어셈블리를 추가합니다 (귀하의 어셈블리는 강한 이름이 있어야 함)

gacutil /I <assembly name> 

두 번째 : 어셈블리를 찾으십시오 코드베이스 또는 프로빙, 당신의 machine.config 파일 또는 msbuild.exe.config .

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyCommon"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <codeBase version="2.0.0.0"
                      href="file://C:/yourpath/MyCommon.DLL"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

세 번째 : David M이 말한 것처럼 어셈블리를 동일한 디렉토리에 복사하고 이후에 삭제하십시오.

옵션은 사용하는 것입니다 일 머지 종속성을 작업 어셈블리로 병합합니다.

이러한 모든 "솔루션"은 환경을 복잡하게하는 더 많은 의존성을 만듭니다. 런타임에 프로브 경로를 업데이트하는 더 쉬운 방법이 있어야합니다 ..

특히 MSBuild는 .proj 파일에 프로브 경로를 추가하거나 종속 DLL을 지정할 수 있어야합니다.

사용을 사용하여 사용자 정의를 정의 할 수 있습니다.

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll" />

그러나 의존성을 추가 할 수 없습니까? 여기에 포함되어야합니다 ... 여기에 포함되어야합니다

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll">
<DependantAssembly AssemblyFile="dependant.dll"/>
</UsingTask>

그러나 이것은 지원되지 않습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top