2009-05-19 5 views
4

csc.exe (글쎄, CruiseControl은 ...)에서 컴파일 중이며 GAC에서 DLL을 참조해야합니다. 이 DLL의 올바른 버전이 단순한 파일이 아니지만 GAC에 올바른 버전이 있습니다.어떻게 csc.exe를 사용하여 GAC의 어셈블리를 참조로 사용합니까?

그러나 csc를 사용하여 GAC에서 어셈블리를 참조 할 수는 없습니다. 실제 파일에 대한 경로가 있어야합니다.

실제 파일 경로를 리버스 엔지니어링 할 수 있다고 주장하는 참조를 찾았지만 제대로 작동하지 못했습니다. 퓨전 로깅을 해고 런타임에서 파일을 가져 오는 위치를 볼 수 있지만 참조 위치에서 파일 경로를 사용하면 작동하지 않습니다.

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

답변

3

나는 비슷한 문제가있었습니다.

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

그런 다음 GAC 외부 곳이 디렉토리에 DLL을 복사 할 수 있습니다 : 내가 사용하는이 솔루션은 (는있는 조립 당신이 원하는 따라 변경) 다음과 같은 뭔가 명령 프롬프트을 열고 디렉토리를하는 것이 었습니다.

+0

예, 열쇠였습니다 - 명령 프롬프트에서 해당 폴더로 이동 한 다음 DLL을 다른 곳으로 복사해야했습니다 *. 어떤 이유로 든 폴더 경로를 CruiseControl의 CSC 작업에 넣을 수 없습니다. 그러나 DLL을 복사하고 권한을 변경하면 잘 참조 할 수 있습니다. – Deane

0

Excel PIA에 대해 컴파일 할 때이 경로를 사용하여이 경로를 사용하여 csc.exe의 명령 줄에 C : \ windows \ assembly \ GAC \ Microsoft.Office.Interop.Excel \ 11.0.0.0의 참조를 지정했습니다. __71e9bce111e9429c \ Microsoft.Office.Interop.Excel.dll

컴파일에 성공했습니다.

?? 이 방법이 효과가 없습니까?

+0

사무실 Interop를 물건을 예제로 사용 되었기 때문에 나는 그것이 내가 이것에 대해 읽어 웹 사이트의 생각 . 하지만 아니요 - 작동하지 않았습니다. 나는 퓨전 로그를보고 광산은 약간 다르다. 단지 "GAC"가 아니라 "GAC_MSIL"이었다. 그러나 어떤 방법으로도 경로가 작동하지 않았습니다. – Deane

+0

실망입니다. 다시 : "어느 경로도 일하지 않았습니다." 음, 한 경로 만 올바른 경로입니다. 해당 경로에 DLL이 실제로 있는지 확인 했습니까? 명령 줄이 필요합니다. CD를 Microsoft.Office.Interop.Excel 디렉토리에 넣은 다음 나머지 버전을 찾으십시오.이 버전은 출시와 컴퓨터마다 다릅니다. 경로를 확인한 후 csc.exe/r : 으로 다시 시도 할 수 있습니까? – Cheeso

3

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> 
+0

여러 개발자와 함께 proj 파일 동시성 문제가 발생하기 때문에이 작업을 수행하는 것을 좋아하지 않습니다. 각각의 개발자는 자신 만의 proj 파일을 가지고 있으며, 서로 다른 상황에 처하게됩니다. SVN은 병합 할 때이를 망쳐 버리는 등의 이상한 점이 있습니다. 나는 csc로 모든 소스 파일을 컴파일하는 것을 선호한다. – Deane

+3

나는 정중하게 동의하지 않는다. 병합 문제를 다루는 것은 파일을 GAC 밖으로 복사하고 권한으로 재생하는 것보다 쉽다. 결국 소스 파일을 병합하는 것과 어떻게 다른가?우리는 이제 직장에서 MSBuild를 사용하고 10 개 정도의 팀과 proj 파일로 작업하지만 짜증나는 일은별로 문제가되지 않습니다. – danswain