2009-09-04 1 views
22

dll에 서명하려는 이유는 전역 어셈블리 캐시에 추가하려고하기 때문입니다. 어셈블리는 Java로 작성되고 J #으로 포팅 된 CSS 파싱 엔진입니다. VS2008을 사용하여 J # 프로젝트를 만들 수 없습니다. 그것은 그것에 할당 된 강력한 이름 키를 가지고 있지 않으며 나는 그것이 지어 졌을 때 어떻게 해야할지 잘 모른다.dll에 이미 빌드 된 어셈블리에 서명하는 방법 flute.dll

누구든지 아이디어가 있습니까?

+1

GAC에 왜 설치해야합니까? 동일한 서버에서 여러 웹 사이트와 함께 사용되는 어셈블리가 있더라도 각 사이트/응용 프로그램이 bin 폴더에 자체 복사본을 보관하도록하는 습관이 있습니다. 이렇게하면 웹 응용 프로그램에 항상 빌드 된 버전이 있고 예상되는 버전이 있으므로 웹 폴더 계층 구조 외부에있는 종속성이 없어 배포 및 롤백이 간단 해집니다. –

+0

그래,하지만 내 권한이 연결되는 모든 방법을 내 웹 사이트 배포 프로젝트 나에게 DLL을 이동할 수있는 권한이 없다는 컴파일을 컴파일 할 때마다 경고를 제공합니다. 그것은 TFS Build에 대해서도 같은 경고를줍니다. 나는 모든 경고를 없애려고 노력하고있다. FXCop 포함. –

답변

41

조금 검색 한 후, 그 중 하나를 설명하는 this post을 발견했습니다.

Exerpt : VS.NET 명령 프롬프트에서

, 다음을 입력

  1. 이 키 파일을 생성합니다 SN -k keyPair.snk
  2. 를 구합니다 제공된 어셈블리의 MSIL : ildasm providedAssembly.dll /out:providedAssembly.il
  3. 이름 바꾸기가/원래 어셈블리를 이동 : providedAssembly.dll providedAssembly.dll.orig이
  4. 새로운 MSIL 출력에서 ​​조립 및 어셈블리 키 파일 생성 REN : ILASM providedAssembly.il/DLL/키를 = keyPair.snk는
+0

이전에 작동하도록 시도했지만 시도 할 수 없었습니다. 어떻게 설명 할 수 있습니까? –

+0

다른 접근 방식으로 내 대답을 편집했습니다. – PJ8

+0

감사로드, 매력처럼 일했다 :) –

1

Strong Name tool는 -R 옵션을 사용하여 기존 어셈블리를 다시 로그인 할 수 있습니다. 그러나 내가 이해하는 바에 따르면 어셈블리는 이전에 서명되었거나 지연 서명이되어 있어야합니다 ... 서명되지 않은 어셈블리와 함께 사용할 수 있는지 확신 할 수 없지만 시도해 볼 수는 있습니다.

18

1 단계 : 디스 어셈블 어셈블리

ildasm myTest.dll /out:myTest.il 

2 단계 : 다음을 사용할 수 있습니다 검증 닷컴 들어

ilasm myTest.il /res:myTest.res /dll /key:myTest.snk /out:myTestSN.dll 

키 당신의 강력한 이름을 사용하여-조립 다시 mand :

sn -vf myTestSN.dll 

희망이 있습니다.

http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing

편집 :

3

이 링크는 또한 당신이 서명하고있는 제 3 자 어셈블리 중 하나가 당신이 서명하고 다른 서명되지 않은 어셈블리에 대한 참조가있는 경우를 포함하여 그것을 수행하는 방법을 보여줍니다 죄송합니다 , 링크가 파열되었습니다.

+0

깨진 링크! 대안 : https://github.com/OJ/buffered.io-hugo/blob/master/content/post/2008-07-09-net-fu-signing-an-unsigned-assembly-without-delay-signing. markdown – AstralisSomnium

0

Thx, 특히 PJ8은 8 년 전 답변을 게시하여 오늘도 저를 저장했습니다. "My"어셈블리는 GAC에 들어가야했지만 SQLite-pcl-net에 종속되어있었습니다. 버전 1.3.1에서는 strong-named SQLitePCLRaw.bundle_green에 의존하고 있지만 강력한 이름이 아닙니다.그래서 나는 다른 말로 자신의 어셈블리에 서명하기 위해 SQLite-pcl-net에 서명해야했습니다. 나는이 포스트의 정보와 내가 오늘 여행 한 몇 개의 다른 장소에서 통합 된 요람에서 무덤까지의 .bat 파일로 끝을 맺었다. "전문가"는 1입니다.이 .bat는 서명하려는 어셈블리의 위치에서 실행됩니다. 2. 3 가지 도구가 dev 컴퓨터에있을 수있는 위치에 대한 힌트를 최소한 보여줍니다. 3. 모든 단계를 순서대로 보여줍니다. 물론 "con"는 귀하의 마일리지가 귀하의 특정 PC에 실제로 ildasm, ilasm 및 sn이있는 위치에 따라 다를 수 있다는 것입니다. 어쨌든 건배.

REM Create a new, random key pair 
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -k SQLite-net.snk 
REM Store the key in the container MySQLiteKeys in the strong name Cryptographic Services Provider (CSP). 
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -i SQLite-net.snk MySQLiteKeys 
REM Disassemble to Intermediate Language 
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\ildasm" SQLite-net.dll /out:SQLite-net.il 
REM Rename original file 
ren SQLite-net.dll SQLite-net.dll.orig 
REM Reassemble to a strong-named version 
"c:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm" SQLite-net.il /dll /key=SQLite-net.snk /out:SQLite-net.dll 
REM Verify the assembly 
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -v SQLite-net.dll 
REM Deletes MySQLiteKeys from the default CSP 
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -d MySQLiteKeys 
REM View results 
pause 
+0

(스타일 편집에 대해 미리 감사드립니다. 올바른 표현 형식을 찾기 위해 열심히 노력했지만 놓친 것 같습니다.) – IVSoftware

관련 문제