[.net] .Net 4.0에서 4.5로 리 타게팅 솔루션-NuGet 패키지를 리 타겟팅하는 방법은 무엇입니까?

현재 VS2010의 .NET 4.0을 VS2012로 타겟팅하는 솔루션을 마이그레이션했으며 이제 .Net 4.5로 대상을 다시 지정하고 싶습니다.

내가 확실하지 않은 것은 NuGet 패키지입니다. 예를 들어 VS2010의 EF4에서 업데이트 한 EF5는 실제로 여기에서 볼 수 있듯이 실제로 EF 4.4로 밝혀졌습니다.

    <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
    </Reference>

프로젝트의 packages.config에서 다음을 볼 수도 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
</packages>

그래서 내 질문은 :

현재 .NET 4.0을 대상으로 설정 한 모든 NuGet 패키지를 .NET 4.5를 대상으로 다시 대상 설정하는 가장 좋은 방법은 무엇입니까?



답변

NuGet 2.1update-package -reinstall -ignoreDependencies패키지 관리자 콘솔에서 수행하는 작업 을 훨씬 간단하게하는 기능을 제공합니다 .

NuGet 2.0 은 응용 프로그램의 대상 변경을 잘 처리하지 못합니다. 패키지의 대상 프레임 워크를 변경하려면 패키지를 설치 제거한 후 다시 설치해야합니다 (설치 한 패키지를 기록하여 각 패키지를 다시 설치할 수 있음).

패키지를 제거하고 다시 설치해야하는 이유는 다음과 같습니다.

  • 패키지를 설치할 때 프로젝트의 대상 프레임 워크를 결정합니다.
  • 그런 다음 패키지 내용과 일치시켜 적절한 \ lib \ 폴더 (및 \ content \ 폴더)를 찾습니다.
  • 어셈블리 참조는 패키지의 \ lib \ 폴더를 가리키는 힌트 경로와 함께 오른쪽 하위 폴더 (예 : \ lib \ net40)와 함께 추가됩니다.
  • 컨텐츠 파일은 오른쪽 하위 폴더 (예 : \ content \ net40)와 함께 packages \ content \ 폴더에서 복사됩니다.
  • packages.config 파일 내에 패키지를 설치하는 데 사용 된 targetFramework를 기록합니다
  • 프로젝트의 대상 프레임 워크를 변경 한 후에도 힌트 경로는 여전히 net40을 가리 킵니다.
  • 패키지를 제거 할 때, 우리는 packages.config에 기록 된 targetFramework를 검사하여 프로젝트에서 제거 할 대상 프레임 워크의 libs / content를 확인합니다
  • 패키지를 다시 설치할 때 업데이트 된 대상 프레임 워크를 감지하고 올바른 라이브러리 / 콘텐츠를 참조 / 복사합니다.

답변

update-package -reinstall <packagename>명령에 문제가있는 사람들을 위해 다음 -ignoreDependencies과 같이 플래그 로 명령을 실행하십시오 .

update-package -reinstall <packagename> -ignoreDependencies

이 플래그는 패키지 종속성을 그대로 둡니다. 그렇지 않으면 원래 재설치하려는 패키지가 여전히 버전을 동일하게 유지하더라도 업데이트 될 수 있습니다.

자세한 내용은 여기를 참조하십시오 .


답변

허용 된 답변을 실패한 후 덜 위험한 명령을 제안하고 싶습니다.

Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies

자세한 정보 :
http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html


답변

패키지 솔루션을 광범위하게 다시 설치하려고 시도하는 동안 -ignoreDependencies플래그 를 사용하더라도 종속성 오류가 발생 했으며 모든 프로젝트에 대한 모든 packages.config 파일이 삭제되었습니다. VS2013에서는 packages.config 가 디스크로 플러시되고 업그레이드 된 모든 종속성 / 참조가 프로젝트에 다시 연결 될 때까지 다시 추가되지 않는 것 같습니다 .

제 경우에는 어떤 일을하면 추가하여 각 프로젝트에 한 번에 하나씩 업그레이드하는 것이 었습니다 -ProjectName 프로젝트 이름을 받는 update-package명령. 이 경우 packages.config 각 프로젝트가 업그레이드 될 때 가 업데이트됩니다.

매우 큰 솔루션에는 실용적이지 않지만 가능한 한 많은 프로젝트에 대해 자동 업그레이드를 활용하고 문제가있는 솔루션을 패키지 에서 삭제 하지 않고도 문제가있는 프로젝트를 격리하는 것이 합리적으로 타협합니다 .


답변

Mac 2019 용 Visual Studio에서 Packages 폴더를 마우스 오른쪽 단추로 클릭하면 메뉴에 ‘대상 변경’옵션이 표시됩니다. 이로써 대상 변경이 필요한 프로젝트의 모든 패키지에 대한 대상 변경 문제가 해결되었습니다. Mac 용 Visual Studio (도구 모음)의 도구 메뉴에 NuGet Package Manager가 없어서 패키지 관리자 콘솔을 시작할 수 없습니다.

패키지 오른쪽 클릭 메뉴에서 대상 변경 메뉴 옵션


답변