Próbuję użyć programu MSBuild do zbudowania rozwiązania z określoną platformą docelową (potrzebuję obu plików binarnych, x86 i x64). Oto jak to wypróbowałem:
C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
Jednak kompilacja zawsze kończy się niepowodzeniem, jeśli platforma jest inna niż „Dowolny procesor”. Co ja robię źle?
To jest while wyjściowe wydruki programu MSBuild:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t: Rebuild / p: Configuration = Release / p: Platform = "x86" Microsoft (R) Build Engine Version 3.5.30729.1 [ Microsoft .NET Framework, wersja 2.0.50727.3082] Copyright (C) Microsoft Corporation 2007. Wszelkie prawa zastrzeżone.
Budowanie rozpoczęto 1.7.2010 8:28:10. Projekt „SolutionPath \ Solution.sln” w węźle 0 (Przebuduj t (y) targe). SolutionPath \ Solution.sln: błąd MSB4126: Określona konfiguracja rozwiązania „Release | x86” jest nieprawidłowa. Proszę określić poprawną konfigurację rozwiązania, używając właściwości Konfiguracja i Platforma (np. MSBuild.exe Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") lub pozostaw te właściwości puste, aby użyć domyślnej konfiguracji rozwiązania. Projekt budowy "SolutionPath \ Solution.sln" (Odbuduj t arget (y)) - BŁĄD.
Budowa nieudana.
„SolutionPath \ Solution.sln” (Rebuild target) (1) -> (ValidateSolutionConfiguration target) -> SolutionPath \ Solution.sln: błąd MSB4126: Określona konfiguracja rozwiązania „Release | x86” jest nieprawidłowa. Określ prawidłową konfigurację rozwiązania, używając właściwości Konfiguracja i Platforma (np. MSBuild.ex e Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") lub pozostaw te właściwości puste, aby użyć domyślnej konfiguracji rozwiązania.
0 Warning(s) 1 Error(s)
Upłynął czas 00: 00: 00.03
Jeśli spróbuję zbudować go na x86 / x64 za pomocą devenv, działa idealnie, jednak próbuję skonfigurować serwer kompilacji bez instalowania wszystkich niezbędnych wersji Visual Studio. Nawiasem mówiąc, jeśli istnieje lepsze darmowe narzędzie (obsługujące .NET Framework 4), bardzo chciałbym o tym usłyszeć.
Win32
podczas gdy moden .NET używax86
Odpowiedzi:
Jeśli chcesz zbudować swoje rozwiązanie dla x86 i x64 , Twoje rozwiązanie musi być skonfigurowane dla obu platform. Właściwie masz po prostu dowolny procesor konfigurację .
Jak sprawdzić dostępną konfigurację dla projektu
Aby sprawdzić dostępną konfigurację dla danego projektu, otwórz plik projektu (
*.csproj
na przykład) i poszukajPropertyGroup
po prawejCondition
.Jeśli chcesz budować w
Release
trybie dlax86
, musisz mieć coś takiego w pliku projektu:Jak tworzyć i edytować konfigurację w programie Visual Studio
(źródło: microsoft.com )
(źródło: msdn.com )
(źródło: msdn.com )
Jak stworzyć i edytować konfigurację (w MSDN)
źródło
Win32
zamiastx86
na przykładCMake
wygenerowane (libssh2
używająCMake
).W programie MSBuild lub Teamcity użyj wiersza polecenia
lub użyj krótszej formy:
Jednak i tak musisz skonfigurować platformę w swoim projekcie, zobacz odpowiedź Juliena Hoarau.
źródło
Platform="Any CPU"
lubPlatform="Mixed Platforms"
dla tych, którzy tego potrzebują.Jeśli próbujesz to zrobić z poziomu wiersza poleceń, możesz napotkać problem polegający na ustawianiu dla Ciebie zmiennej środowiskowej „Platforma” dla całego komputera i działającej przeciwko Tobie. Mogę to odtworzyć, jeśli używam okna poleceń VS2012 zamiast zwykłego okna poleceń systemu Windows.
W wierszu polecenia wpisz:
W oknie poleceń VS2012 mam ustawienie wstępne „X64”. Wydaje się, że koliduje z tym, co jest w moim pliku rozwiązania.
W zwykłym oknie poleceń polecenie „set” powoduje wyświetlenie komunikatu „zmienna niezdefiniowana”… co jest dobre.
Jeśli wynik powyższego polecenia „set” nie zwraca żadnej wartości zmiennej środowiskowej, wszystko powinno działać.
źródło
W przypadku VS2017 i 2019 ... z nowoczesnymi plikami projektu zestawu SDK biblioteki podstawowej platformę można zmienić podczas procesu kompilacji. Oto przykład przejścia na
anycpu
platformę tuż przed uruchomieniem wbudowanegoCoreCompile
zadania:W moim przypadku buduję FPGA z zadaniami
BeforeTargets
iAfterTargets
, ale kompiluję aplikację C # w głównymCoreCompile
. (częściowo dlatego, że mogę potrzebować jakiejś aplikacji wiersza poleceń, a częściowo dlatego, że nie mogłem wymyślić, jak pominąć lub zastąpićCoreCompile
)Aby zbudować dla wielu współbieżnych plików binarnych, takich jak x86 i x64: konieczne byłoby albo oddzielne, ręczne zadanie kompilacji, albo dwa oddzielne pliki projektu z odpowiednimi ustawieniami
<PlatformTarget>x86</PlatformTarget>
i<PlatformTarget>x64</PlatformTarget>
ustawieniami z powyższego przykładu.źródło