전제 조건으로 표시하려면 ‘Assembly’* .dll ‘에 강력한 서명이 필요한 이유는 무엇입니까? 컴파일하려고하는데 Visual Studio에서

C # 4.0을 사용하여 Excel 추가 기능을 컴파일하려고하는데 Visual Studio에서 프로젝트를 빌드 할 때이 문제가 발생하기 시작했습니다. 이전에이 문제가 발생하지 않았다는 것을 알려주는 것이 중요합니다. 이것이 일어날 수있는 원인은 무엇입니까?



답변

내 생각 엔 강력한 이름의 어셈블리로 작업하지 않는 것입니다. 두 프로젝트가 동일한 어셈블리의 약간 다른 버전을 참조하고 더 종속적 인 프로젝트가 이러한 프로젝트를 참조 할 때이 오류가 발생했습니다. 필자의 경우 해결 방법은 .csproj 파일의 어셈블리 이름에서 키 및 버전 정보를 제거하고 (어쨌든 중요하지 않음) 깨끗한 빌드를 수행하는 것이 었습니다.

서로 다른 어셈블리 버전 간의 변경 사항은이를 참조하는 솔루션의 일부와 호환되었습니다. 그렇지 않은 경우 문제를 해결하기 위해 추가 작업을 수행해야 할 수도 있습니다.

NuGet

NuGet을 사용하면 다음과 같은 경우이 상황에 쉽게 도달 할 수 있습니다.

  1. 솔루션에서 하나의 프로젝트에 패키지를 설치합니다.
  2. 해당 패키지의 새 버전이 패키지 소스에 배포됩니다.
  3. 동일한 솔루션으로 다른 프로젝트에 설치합니다.

결과적으로 해당 패키지 어셈블리의 다른 버전을 참조하는 솔루션의 두 프로젝트가 생성됩니다. 그중 하나가 다른 하나를 참조하고 ClickOnce 앱인 경우이 문제가 나타납니다.

이 문제를 해결하려면 update-package [package name]Nuget Package Manager 콘솔에서 명령을 실행하여 모든 것을 레벨 경기장으로 가져 가면 문제가 해결됩니다.

강력한 이유가없는 한 프로젝트 레벨이 아닌 솔루션 레벨에서 NuGet 패키지를 관리해야합니다. 솔루션 레벨 패키지 관리는 여러 버전의 종속성의 가능성을 피합니다. 관리 UI를 사용할 때 통합 탭에 하나 이상의 패키지에 여러 버전이있는 것으로 표시되면이를 하나로 통합하는 것을 고려하십시오.


답변

이 문제가 발생했을 때 ‘ClickOnce 보안 설정 사용’을 해제하여 문제를 해결했습니다.

메뉴 : 프로젝트 | ‘프로젝트 이름’속성 … | 보안 탭 | ‘ClickOnce 보안 설정 사용’확인란.


답변

답변을 참조하십시오 .

게시 페이지로 이동하여 “응용 프로그램 파일”을 클릭하십시오. 거기에서 DLL 목록이 나타납니다. 문제가있는 사용자의 게시 상태가 “전제 조건”이 아니라 “포함”으로 표시되어 있는지 확인하십시오.


답변

나는이 문제를 겪었다. 동일한 어셈블리를 가리 키지 만 다른 버전의 프로젝트가 많았 기 때문에 발생했습니다. 내 솔루션의 모든 프로젝트에 동일한 버전을 선택하여 해결합니다.


답변

어셈블리 버전을 변경했거나 오류에 명시된 다른 버전의 관리되는 라이브러리를 복사 한 경우 이전에 잘못된 버전을 참조하는 파일을 컴파일했을 수도 있습니다. ‘모두 다시 작성'(또는 이전 주석에서 언급 한 ‘bin 및’obj ‘폴더 삭제)이이 문제를 해결해야합니다.


답변

키로 어셈블리에 서명해야합니다. 탭 서명 아래의 프로젝트 속성으로 이동하십시오.


답변

누군가 에게이 문제에 대한 해결책을 추가하면 도움이 될 수 있습니다.

이 오류가 발생하는 ClickOnce 솔루션이 있습니다. 앱은 공통 “Libs”폴더를 참조하고에 대한 프로젝트 참조를 포함했습니다 Foo.dll. 솔루션의 프로젝트 중 어느 것도 Foo.dll“Libs”폴더에 있는 정적 사본을 참조하지 않았지만 해당 폴더의 일부 참조는 수행했습니다 (예 : 내 솔루션에 Libs\Bar.dll어느 참조를 참조했는지 Foo.dll) CO 앱이 모든 종속성을 가져 왔기 때문에 Libs의존성뿐만 아니라 두 사본 모두 프로젝트에 참여했습니다. 위의 오류가 발생했습니다.

Libs\Foo.dll정적 버전을 하위 폴더로 이동하여 문제를 해결했습니다 Libs\Fix\Foo.dll. 이 변경으로 인해 ClickOnce 앱은 DLL의 프로젝트 버전 만 사용하게되었으며 오류는 사라졌습니다.