문제

Visual Basic 2008 Express에서 만든 프로젝트가 있습니다. 다른 사람의 C# 프로젝트에서 변환했지만 작동합니다. 몇 가지 DLL 종속성이 있습니다. 프로젝트를 게시하여 다른 컴퓨터에 설치할 수 있고 각 DLL에 대해 오류가 발생합니다. "어셈블리는 전제 조건으로 표시되도록 강력한 서명해야합니다." 나는 약간의 연구를했지만 많이 찾지 못했고 내가 찾은 것을 실제로 이해하지 못했습니다. 이 오류는 무엇을 의미합니까? 그것을 해결하는 가장 좋은 방법은 무엇입니까? 또 다른 한 가지 : 모든 DLL을 올바르게 참조 할 수있는 데 오랜 시간이 걸렸으므로 솔루션은 DLL을 이동하는 것과 아무 관련이 없기 때문에 기본 프로젝트에서 기능을 중단 할 수 있기를 선호합니다.

도움이 되었습니까?

해결책

ClickOnce를 통해 게시하는 경우 게시 페이지로 이동하여 "응용 프로그램 파일"을 클릭하십시오. 거기에서 DLL 목록이 표시됩니다. 당신에게 문제를주는 사람들이 "전제 조건"보다는 "포함"으로 표시된 상태를 표시하는지 확인하십시오.

이 오류 메시지가 의미하는 바는 현재 게시 설정이 설치되기 전에 대상 시스템의 글로벌 어셈블리 캐시에 해당 어셈블리가 존재할 것으로 기대한다는 것입니다. GAC의 모든 어셈블리가 강력하게 서명해야하므로, 서명되지 않은 전제 조건으로 표시된 어셈블리는이 오류를 제공합니다.

다른 팁

해결 방법은 그보다 더 간단합니다.

  1. 프로젝트로 이동하십시오.
  2. 마우스 오른쪽 버튼을 클릭하고 속성을 선택하십시오.
  3. 보안 탭으로 이동하십시오.
  4. ClickOnce 보안 설정을 선택 취소하십시오.

ClickOnce를 통해이 응용 프로그램을 배포하지 않는 한 어셈블리를 강력하게 이름을 지을 필요는 없습니다.

강력하게 명명 된 어셈블리는 주로 암호화 키로 서명 한 어셈블리입니다. 이것은 Visual Studio를 사용하기가 상당히 쉽고 종속성을 다시 주문할 필요가 없습니다.

Express 비 Visual Studio를 사용하고 있으므로 단계가 약간 다를 수 있습니다.

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오
  • 서명 탭을 클릭하십시오
  • "어셈블리 서명"을 확인하십시오.
  • 콤보 박스에서 "u003CNew...> "
  • 마법사를 완성하십시오
  • 재건

이 링크를 확인하십시오 ... 강한 이름으로 어셈블리에 서명하는 지침이 있습니다.

MSDN : 강한 이름으로 어셈블리에 서명합니다

강력한 이름을 만들려면 SDK 명령 프롬프트 또는 Visual Studio 200X 명령 프롬프트로 이동 한 다음 다음을 입력하십시오.

sn -k sgKey.snk

나타내다 자세한 내용은이 링크입니다

그런 다음 아래 명령을 실행하여 강한 이름을 어셈블리에 연결하십시오.

al /out:MyAssembly.dll MyOldAssembly.dll /keyfile:sgKey.snk

나타내다 자세한 내용은이 링크입니다

이것은 위에서 언급 한 솔루션이 실패한 후에 나에게 효과가있었습니다.

어셈블리에 대한 참조를 오류로 제거한 다음 다시 추가하십시오.

내 문제가 .csproj 파일에 있다는 것을 알았습니다.

<Reference Include="OtherProjectNothingToDo">
  <HintPath>..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe</HintPath>
</Reference>

그런 다음 메모장을 사용하여 제거했는데 지금은 괜찮습니다.

사용 아담 로빈슨 솔루션을 통해 게시 할 수 있었지만 최종 사용자 시스템이 하드 드라이브 공간을 지적하면서 설치가 불가능하다고 불평하기 때문에 사용자가 프로젝트를 게시 한 후에는 사용자가 설치할 수 없다는 것을 알았습니다. 이것이 근본 원인이 될 가능성이 거의없는 것처럼 보였으므로 더 자세히 살펴 보았습니다.

분명히 내 문제의 기초는 내 참고 문헌 중 하나가 내 프로젝트가 사용했던 .dll을 참조하는 것이 아니라 다른 버전을 참조했다는 것입니다. Clickonce는 이것을 가지고 있지 않았으며, 이미 존재하는 버전을 인용하여 .dll의 두 번째 버전을 사용자 시스템에 복사하는 것을 거부했습니다. .dll과 프로젝트는 다른 버전의 다른 .dll을 참조하여 오류를 제거하고 설치 문제를 수정했습니다.

대상 프레임 워크가 실제로 3.5 또는 타겟팅하려는 프레임 워크로 설정되어 있는지 확인하십시오. 때로는 제대로 설정되지 않으면 오류가 발생합니다.

나도이 문제가 있었다. 제 경우에는 Blabla.dll이 내 솔루션에서 참조되었지만 Blabla.dll도 프로젝트에서 참조 한 다른.dll에도 사용되었습니다.

두 Blabla.dll의 버전을 확인하면 동일하지 않았습니다. 그래서 나는 올바른 blabla.dll로 다른 것들을 업데이트 한 다음 내 솔루션에서 새로운 다른 것들을 참조했습니다. 오류가 사라졌습니다.

한마디로 : 나는 2 가지 버전의 blabla.dll을 사용하고 있었다.

알려주지 않으면 이것이 말이되기를 바랍니다. :)

자세한 설명은 내 블로그를 확인하십시오.블로그 기사

Jacob iedema에 간주합니다

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