2009-08-17 2 views
2

VSTO를 사용하여 몇 가지 Excel 2003/2007 추가 기능을 작성했으며 일반적으로 VSTO 프로젝트에서 .NET DLL을 참조하게됩니다. 일반적으로 프로젝트간에 코드를 재사용합니다.
다음 문제가 발생했습니다. dll에 대한 호출이 디버그 모드 나 개발 컴퓨터에서 완벽하게 작동하지만 msi 설치 프로그램을 통해 추가 기능을 배포하면 dll이 추가 기능의 폴더에 추가되지만 추가 기능에는 포함되지 않습니다. DLL을 호출 할 수있을 것 같습니다.
몇 가지 어려움을 겪은 후에 설치 프로그램의 사용자 지정 작업 위에 추가 기능에 대한 보안을 부여하는 대신 추가 기능에서 참조하는 각 개별 dll에 보안을 부여하는 다른 사용자 지정 작업을 추가합니다
http://msdn.microsoft.com/en-us/library/bb332052.aspxVSTO 프로젝트 배포에 참조 된 어셈블리를 추가하는 방법은 무엇입니까?

내 문제는 제대로 작동하는 것으로 확신 할 수 없다는 것입니다. 너무 지루한데 빌드 할 때 경고를받습니다. 실제로 할 수있는 것은 실제로 동일한 위치에서 보안이 두 번 부여된다는 사실입니다.
여기있는 사람은 내가 올바르게하고 있는지 아닌지를 말할 수 있습니다. 더 좋은 방법은 무엇입니까?

답변

1

내 경우 MyCompany.Office 아래에 추가 기능 모음이 있습니다.

두 가지 추가 기능인 MyCompany.Office.Word.dll 및 MyCompany.Office.Excel.dll에서 참조하는 MyCompany.Office.dll이라는 핵심 기능의 공유 라이브러리가 있습니다. Word 용 및 Excel 용, 또는 원하는 모든 것이 아닌 Excel 용 여러 추가 기능.

내가 한 것은 솔루션에 대한 강력한 이름의 키 파일을 만들고 세 프로젝트에서 모두 연결 한 것입니다. 그런 다음 동일한 이름의 키 파일로 세 라이브러리를 모두 서명했습니다.

그런 다음 파일 위치가 아닌 공개 키를 사용하여 CAS 항목을 추가하는 설치 관리자 작업을 만들었습니다. 그래서 내 사용자 지정 동작은 궁극적으로 caspol.exe -m -q -ag "My_Computer_Zone" -strong -hex <my public key> -noname -noversion FullTrust -n "MyCompany_Office" -d "Code group for MyCompany.Office add-ins."을 호출합니다. 그러면 해당 공용 키가있는 모든 라이브러리에 FullTrust가 제공됩니다.

명령 프롬프트를 열고 키 파일 위치로 이동 한 후 sn -Tp mykeyfile.snk을 입력하면 공개 키를 볼 수 있습니다.

private static String GetPublicKeyHexString(String assemblyPath) 
{ 
    AssemblyName assmName = Assembly.LoadFile(assemblyPath).GetName(); 
    StringBuilder output = new StringBuilder(); 
    Byte[] publicKey = assmName.GetPublicKey(); 

    foreach(Byte byte in publicKey) 
    { 
     output.Append(byte.ToString("x").PadLeft(2, '0')); 
    } 

    return output.ToString(); 
} 
+0

내가 올바른 답변으로이를 표시하기 전에을 시도해야하지만, 이것은 분별 같습니다 당신이 (SetSecurity 연장 등) 공개 키 프로 문법을 얻고 싶은 경우에, 당신은 다음과 같은 코드를 사용할 수 있습니다. – Mathias

+0

또한 URL을 증거로 사용하고 URL을 설치 디렉토리로 설정할 수 있습니다. 이로써 FullTrust 폴더에 모든 어셈블리를 제공합니다. 나는 이것을 추천하지 않는다. 누군가가 설치 폴더에 악의적 인 어셈블리를 드롭하여 완전히 신뢰하게 만들면 누군가가 취약점을 만들 수 있다고 비난 할 수 있습니다. 나는 누군가가 그것을 제안하는 경우에 이것을 언급 할 뿐이다. 그래서 그것이 왜 좋은 생각이 아닌지 알 수있다. – HackedByChinese

+0

감사합니다. 작동한다고 생각합니다. 실제로이 게시물은 SetSecurity 프로젝트의 작은 수정을 제안하는 msdn 포럼에서 발견되었으므로 단일 DLL (스레드의 Lex007 포스트) 대신 쉼표로 구분 된 dll 목록을 추가 할 수있었습니다. 그렇게하면 같은 키를 공유 할 필요가 없습니다. http://social.msdn.microsoft.com/forums/en-US/vsto/thread/cec6abb6-4716-4bde-91f2-25fb68abd54e/ – Mathias

관련 문제