2014-12-19 8 views
6

Mam aplikację konsoli VS 2013, która ładuje dowolny plik rozwiązania (.sln) - kompiluje wszystkie projekty w nim za pomocą Roslyn i wyodrębnia informacje o wykorzystaniu API z modelu kompilacji.MSBuildWorkspace.OpenSolutionAsync poszukiwanie celów w Visual Studio/v14.0

Mam teraz do czynienia z tym szczególnym problemem - Kiedy uruchomię aplikację z Visual Studio 2013 (przy użyciu Ctrl-F5 lub F5) wszystko działa dobrze. Potrafię kompilować i wyciągać wszystkie informacje. Jednak kiedy otworzyć wiersz poleceń (cmd) i spróbuj uruchomić tę aplikację z konsoli pojawia się następujący błąd:

Unhandled Exception: System.AggregateException: One or more errors occurred. ---> Microsoft.Build.Exceptions.InvalidProjectFileException: The imported project " 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Impor 
When I run 

Zanotować v14.0 tam. Dlaczego MSBuildWorkspace próbuje zajrzeć do katalogu v14.0 pod kątem wymaganych plików docelowych? Czy to dlatego, że zainstalowałem narzędzia MSBuild dla CTP i zmieniono ścieżkę domyślną, gdy uruchamiam elementy z prostego wiersza poleceń?

--Edit-- Oto import

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 

Jednak wątpię, jest to zrobić ze stwierdzeniem Importuj jako takie. Jeśli uruchomię aplikację .exe konsoli z "Developer Command Prompt for Visual Studio 2013", wszystko znów będzie działać poprawnie.

+0

Pokaż nam '' sw twoim pliku projektu. – SLaks

+0

Uderzam w ten sam problem. Czy kiedykolwiek byłeś w stanie to rozwiązać? – ChaseMedallion

+0

Nie jest to prawdziwe rozwiązanie, ale jak już wspomniano, działa z wiersza poleceń VS. Jako obejście tego problemu utworzyłem plik wsadowy, który najpierw wywołuje "C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat", a następnie działa poprawnie. –

Odpowiedz

2

Miałem ten problem na moim serwerze kompilacji. Kiedy celowałem w /tv:14.0 (Wersja narzędzia 14.0, który jest silnikiem Roslyn Build)

Rozwiązałem go, przechodząc do C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio, a następnie tworząc foldery takie jak v14.0 \ WebAplikacje

Potem poszedłem do mojego systemu z Microsoft.WebApplication.targets (ponieważ jest to wydane przez Visual Studio 2015) i skopiowałem ten plik do nowego folderu kompilacji.

+0

/p:VisualStudioVersion=11.0 działało, /p:VisualStudioVersion=12.0 nie powiodło się, więc utworzyłem katalog v12.0 \ WebApplications, który skopiował jego zawartość z wersji 11 \ WebApplications i kompilacja działała (nie wiem, co tak naprawdę robi, ale pracował) – Aligma

+0

Czy masz program Visual Studio 2012 zainstalowany na serwerze kompilacji? Wersja 12 to w rzeczywistości Visual Studio 2013. – DoomVroom

6

Możesz sprawić, że projekty aplikacji WWW będą w pełni autonomiczne i nie będą wymagały programu Visual Studio 2015 do kompilacji przez dodanie odwołania NuGet do MSBuild.Microsoft.VisualStudio.Web.targets.

+0

Kopiowanie/wklejanie z maszyny deweloperskiej nie jest dobrym rozwiązaniem, TO jest świetne rozwiązanie. – silencedmessage

+0

Dodałem to odwołanie, ale teraz niektóre inne biblioteki DLL są wymienione jako "nie znaleziono" lub "brakuje". Kompilacja w VS2015 działa dobrze, ale serwer Build narzeka, że ​​brakuje tych referencji. Perplexed