Mam rozwiązanie w Visual Studio 2012 zawierające 170 projektów C #. Muszę przekierować wszystkie projekty z .NET Framework 4.0 do 4.5.2.
Wolę pozwolić programowi Visual Studio zająć się tym, przechodząc do właściwości każdego projektu, zmieniając docelową strukturę i pozwalając programowi Visual Studio na wprowadzenie wszelkich niezbędnych zmian w plikach .csproj.
Zauważyłem, że te zmiany obejmują dodanie kilku nowych tagów XML do pliku .csproj, w zależności od niektórych atrybutów bieżącego projektu.
Jak można zbiorczo ponownie kierować wszystkie projekty 170 C # bez użycia narzędzia do zamiany tekstu w celu zastąpienia docelowego numeru wersji? Chcę, aby program Visual Studio wprowadził wszystkie niezbędne modyfikacje i uzupełnienia tagów, a samo zastąpienie nie pozwoli na to.
źródło
Odpowiedzi:
Dokumentacja MSDN „ Przewodnik po migracji do .NET Framework 4.5 ” i „ Jak skonfigurować aplikację do obsługi .NET Framework 4 lub 4.5 ” omawia tylko modyfikowanie projektów. Nie ma szczegółów dotyczących stosowania zmian w całym rozwiązaniu naraz, ani nie widziałem funkcji w VS, która to obsługuje.
Jednak w galerii programu Visual Studio dostępne jest (dobrze oceniane) rozszerzenie o nazwie Target Framework Migrator , które obsługuje uaktualnianie do wersji 4.5.2 (a także nowsze wersje **) i wygląda na to, że zrobi dokładnie to, co chcesz. Jeśli jesteś zainteresowany, kod źródłowy jest dostępny na GitHub .
Zauważ, że brak takiej funkcji może być celowy (a nie tylko zaniedbanie). Zgaduję, ale może dane MS tylko te projekty, które wymagają nowych ram, zostaną zaktualizowane. FWIW, jeśli w końcu zaktualizujesz niektóre projekty, które są współdzielone z innymi rozwiązaniami, te rozwiązania mogą nie zostać zbudowane, dopóki nie zostaną zaktualizowane.
Biorąc to pod uwagę, jeśli jesteś w małym sklepie z jednym (lub kilkoma) rozwiązaniami i chcesz zaktualizować wszystko za jednym razem, być może powyższe narzędzie będzie dla Ciebie odpowiednie.
Jeśli nie możesz zmusić go do pracy z nowszą wersją .NET Framework, sprawdź istniejące PR i problemy pod kątem poprawek, ale być może będziesz musiał zastosować je samodzielnie. Na przykład ktoś opublikował poprawkę dla .NET Framework v 4.7.1 . Mam nadzieję, że zostaną połączone, ale nie wstrzymywałbym oddechu.
Jeśli ktoś inny widzi ten sam błąd co Anas (w komentarzach), oto problem z GitHubem sprzed kilku tygodni i inny prawdopodobnie powiązany problem z 2017 roku. Jeśli masz ten sam problem, rozważ podniesienie kciuków i dodanie więcej szczegółów .
źródło
W przypadku rozwiązania .NET Framework wystarczyło proste „ Zamień w plikach ”:
np . z .NET Framework 4.5.2 do .NET Framework 4.7.2
W plikach package.config zamień wszystkie
targetFramework="net452"
do
targetFramework="net472"
W plikach * .csproj zamień wszystkie
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
do
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
źródło
Ponieważ Target Framework Migrator jest uszkodzony, przeprowadziłem własne wyszukiwanie / zamianę (używając git bash, działa dobrze w systemie Windows); Zasadniczo zmienia v4.6.x na v4.7.2 , a następnie konwertuje pliki z powrotem na użycie niesławnego CRLF DOS:
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
źródło
Update-Package -ReInstall
czynię cuda. Dzięki!Zbudowałem sobie proste narzędzie do migracji docelowych wersji frameworka dla całego rozwiązania, ponieważ rozszerzenie Target Framework Migrator nie obsługuje programu Visual Studio 2017. Pobierz narzędzie z mojego repozytorium GitHub https://github.com/Xpitfire/TargetFrameworkMigrator
Wiem, że to nie jest najlepsza droga, ale mi się udało i może pomoże też komuś innemu.
źródło
Target Framework Migrator jest całkiem przydatny. Domyślnie dochodzi do wersji 4.7. Jednak łatwo jest dodać obsługę wersji 4.7.1, 4.7.2 i 4.8.
Znajdź plik Frameworks.xml w folderze C: \ Users {nazwa użytkownika} \ AppData \ Local \ Microsoft \ VisualStudio \ i edytuj, dodając następujące wersje frameworka:
<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"/>
Po ponownym uruchomieniu programu Visual Studio zobaczysz nowe wersje.
źródło
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(); }
źródło