문제

나는 csc.exe (음, cruisecontrol is ...)에서 편집하고 있으며 GAC에서 DLL을 참조해야합니다. 이 DLL의 올바른 버전은 간단한 파일로는 없지만 GAC에는 올바른 버전이 있습니다.

그러나 GAC의 어셈블리를 CSC로 참조 할 수는 없습니다. 실제 파일의 경로가 있어야합니다.

실제 파일의 경로를 리버스 엔지니어링 할 수 있다고 주장하는 몇 가지 참고 문헌을 찾았지만 작업을 수행 할 수 없었습니다. Fusion Logging을 발사했는데 런타임이 파일을 얻는 위치를 알 수 있지만 참조에서 해당 위치에 FilePath를 사용하는 것은 작동하지 않습니다.

그렇다면 CSC는 GAC에만 존재하는 어셈블리 버전에 대한 참조를 어떻게 제공합니까?

도움이 되었습니까?

해결책

나는 비슷한 문제가 있었다. 내가 사용한 솔루션은 명령 프롬프트를 열고 디렉토리를 다음과 같은 것으로 변경하는 것이 었습니다 (원하는 어셈블리에 따라 변경).

C:\WINDOWS\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0__31bf3856ad364e35\

그런 다음이 디렉토리의 DLL을 GAC 외부의 어딘가에 복사 할 수 있습니다.

다른 팁

NANT 또는 MSBUILD를 사용하고 Visual Studio에서 생성 한 .csproj 파일 만 사용하는 것이 좋습니다. 그런 다음 cruisecontrol을 사용하여 Nant 스크립트를 사용하십시오. 아래는 내가 쓴 Nant 스크립트의 추출물입니다.

<csc target="library" output="${basedir}/bin/${basename}.dll" debug="${debug}" optimize="true">
  <sources>
    <include name="src/app/**/*.cs"/>
  </sources>
  <references refid="My.Assemblies" />
</csc>

그리고 참고 문헌

      <assemblyfileset id="My.Assemblies"><include name="System.dll"></include>
    <include name="System.Configuration.dll"></include>
    <include name="System.Core.dll"></include>
    <include name="System.Data.dll"></include>
    <include name="System.Data.DataSetExtensions.dll"></include>
    <include name="System.Drawing.dll"></include>
    <include name="System.EnterpriseServices.dll"></include>
    <include name="System.Web.dll"></include>
    <include name="System.Web.Extensions.dll"></include>
    <include name="System.Web.Mobile.dll"></include>
    <include name="System.Web.Services.dll"></include>
    <include name="System.Xml.dll"></include>
    <include name="System.Linq.dll"></include>
</assemblyfileset>

Excel PIA에 대해 컴파일 할 때이 경로를 사용하여 CSC.exe의 명령 줄에 참조를 지정했습니다. .interop.excel.dll

컴파일이 성공했습니다.

?? 이것이 당신에게 효과가 없습니까?

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