Visual Studio 2012에 170 개의 C # 프로젝트가 포함 된 솔루션이 있습니다. .NET Framework 4.0에서 4.5.2로 모든 프로젝트의 대상을 변경해야합니다.
각 프로젝트의 속성으로 이동하여 대상 프레임 워크를 변경하고 Visual Studio가 .csproj 파일에 필요한 변경을 수행하도록하여 Visual Studio에서이를 처리하도록하는 것을 선호합니다.
이러한 변경 사항에는 현재 프로젝트의 일부 속성에 따라 .csproj에 몇 가지 새로운 XML 태그를 추가하는 것이 포함됩니다.
대상 버전 번호를 바꾸기 위해 텍스트 바꾸기 도구를 사용하지 않고 170 개의 모든 C # 프로젝트를 일괄 적으로 다시 대상화하려면 어떻게해야합니까? Visual Studio가 필요한 모든 태그 수정 및 추가를 수행하기를 원하며 대체만으로는 그렇게 할 수 없습니다.
답변
MSDN 설명서 ” .NET Framework 4.5 로의 마이그레이션 가이드 “및 ” .NET Framework 4 또는 4.5를 지원하도록 앱을 구성하는 방법 “에서는 프로젝트 수정에 대해서만 설명합니다. 한 번에 전체 솔루션에 변경 사항을 적용하는 것에 대한 세부 정보가 없으며 VS에서 지원하는 기능을 본 적이 없습니다.
그러나 Visual Studio 갤러리에서 사용할 수있는 Target Framework Migrator 라는 (잘 평가 된) 확장이 있는데,이 확장은 4.5.2 (최신 버전 **) 로의 업그레이드를 지원하며 원하는대로 정확히 수행 할 수 있습니다. 관심이 있다면 GitHub 에서 소스 코드를 사용할 수 있습니다 .
이러한 기능이없는 것은 의도적 인 것일 수 있습니다 (단순한 누락이 아닙니다). 나는 추측하고 있지만 MS 는 새로운 프레임 워크가 필요한 프로젝트 만 업그레이드 될 것이라고 생각합니다. 다른 솔루션을 공유하는 몇 가지 프로젝트를 업그레이드 끝날 경우까지 FWIW는, 그 솔루션은 빌드에 실패 할 수 있습니다 그들이있어 너무 업그레이드.
즉, 하나 (또는 몇 개)의 솔루션 만있는 소규모 상점에서 모든 것을 한 번에 업그레이드하려는 경우 위의 도구가 적합 할 것입니다.
최신 .NET Framework 버전에서 작동하도록 할 수없는 경우 기존 PR 및 문제 에서 수정 사항을 확인하되 직접 적용해야 할 수도 있습니다. 예를 들어 누군가 .NET Framework v 4.7.1 에 대한 수정 사항을 게시했습니다 . 이것이 합쳐지기를 바라지 만 나는 숨을 참지 않을 것이다.
다른 사람이 Anas와 동일한 오류를보고 있다면 (댓글에서) 몇 주 전의 GitHub 문제 와 2017 년의 또 다른 관련 문제 일 수 있습니다. 같은 문제가 발생하면 엄지 손가락을 올려서 자세한 내용을 추가해보세요. .
답변
.NET Framework 솔루션의 경우 간단한 ” 파일에서 바꾸기 “가 나를 위해 트릭을 수행했습니다.
예 : .NET Framework 4.5.2 에서 .NET Framework 4.7.2로
에서 package.config 파일을 모두 교체
targetFramework="net452"
에
targetFramework="net472"
에서 * .csproj 파일을 모두 교체
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
에
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
답변
Target Framework Migrator 가 손상 되었기 때문에 내 자신의 검색 / 바꾸기를 롤링했습니다 (git bash 사용, Windows에서 정상적으로 작동 함). 기본적으로는 변경 v4.6.x 에 v4.7.2을 , 다음은 악명 DOS의 CRLF를 사용하여 파일을 다시 변환 :
find . \( -iname '*.csproj' -o -iname '*.vcxproj' -o -iname 'app.config' \) \
-exec grep -Z -l 'v4\.6\..' \{} \; | xargs -0 sed -i 's/v4\.6\../v4.7.2/'
find . \( -iname '*.csproj' -o -iname '*.vcxproj' -o -iname 'app.config' \) \
-exec grep -Z -l 'v4\.7\..' \{} \; | xargs -0 unix2dos
답변
Target Framework Migrator Extension은 Visual Studio 2017을 지원하지 않기 때문에 전체 솔루션의 대상 프레임 워크 버전을 마이그레이션하는 간단한 도구를 직접 만들었습니다. 내 GitHub 저장소 https://github.com/Xpitfire/TargetFrameworkMigrator 에서 도구를 다운로드합니다.
이것이 최선의 방법이 아니라는 것을 알고 있지만 저에게 효과적이며 다른 사람에게도 도움이 될 것입니다.
답변
Target Framework Migrator 는 매우 유용합니다. 기본적으로 v4.7까지 제공됩니다. 그러나 v4.7.1, v4.7.2 및 v4.8에 대한 지원을 추가하는 것은 쉽습니다.
C : \ Users {username} \ AppData \ Local \ Microsoft \ VisualStudio \ 폴더에서 Frameworks.xml 파일을 찾고 다음 프레임 워크 버전을 추가하여 편집합니다.
<Framework Id="262152" Name=".NETFramework,Version=v4.8"/>
<Framework Id="262663" Name=".NETFramework,Version=v4.7.2"/>
<Framework Id="262407" Name=".NETFramework,Version=v4.7.1"/>
Visual Studio를 다시 시작하면 새 버전이 표시됩니다.
답변
public void ChangeFramework() {
//Add Reference to envdte (Assemblies\Extensions\envDTE)
string SolutionFile = @"C:\MyProject\MyProject.sln";
string ProjectName = "MyProject";
//------------------------------------------------------------------------
//Find the Program ID from the registry for VisualStudio.DTE
//Look it up In Registry: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes
System.Type oType = System.Type.GetTypeFromProgID("VisualStudio.DTE", true);
EnvDTE.DTE dte = (EnvDTE.DTE)Activator.CreateInstance(oType, true);
//------------------------------------------------------------------------
//Open your Solution
dte.Solution.Open(SolutionFile);
//------------------------------------------------------------------------
//Now In your solution go through what is listed in dte.Solution.Projects
//and find the one that match what you want to change target for
int iItemsCount = dte.Solution.Projects.Count;
string sCurrent = "";
for (int i = 1; i <= iItemsCount; i++) {
sCurrent = dte.Solution.Projects.Item(i).Name;
if (dte.Solution.Projects.Item(i).Name == ProjectName) {
//Once you find your project, Change the Framework
EnvDTE.Project oProject = dte.Solution.Projects.Item(i);
oProject.Properties.Item("TargetFrameworkMoniker").Value = ".NETFramework,Version = v4.6.2";
}
}
//------------------------------------------------------------------------
//Close your Solution
dte.Solution.Close();
}