현재 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.1 은 update-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 각 프로젝트가 업그레이드 될 때 가 업데이트됩니다.
매우 큰 솔루션에는 실용적이지 않지만 가능한 한 많은 프로젝트에 대해 자동 업그레이드를 활용하고 문제가있는 솔루션을 패키지 에서 삭제 하지 않고도 문제가있는 프로젝트를 격리하는 것이 합리적으로 타협합니다 .