2012-07-09 13 views
9

Używam Visual Studio 2012 RC do pracy z moim rozwiązaniem C#. Wszystkie moje ustawienia dotyczące konfiguracji są przechowywane w jednym pliku .props, który jest następnie dołączany do wszystkich moich plików .csproj.Visual Studio dodaje dodawanie własności do mojego csproj. Czemu?

Jeszcze VS nalega na wprowadzenie tego prawa przed obejmują:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> 
    <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Debug\</IntermediateOutputPath> 
</PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> 
    <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Release\</IntermediateOutputPath> 
</PropertyGroup> 

<Import Project="$(MSBuildProjectDirectory)\..\Common.props" /> 

Dlaczego tak jest?

FYI, mój wspólny plik wygląda tak: http://pastebin.com/Uued1XY0

+1

Najprostszą odpowiedzią jest to, że Microsoft nigdy nie uważa, że ​​wykona takie dostosowanie pliku csproj. Czasami możesz trochę zmodyfikować pliki projektu (przez szczęście), ale przez większość czasu po prostu się niepokoisz. –

Odpowiedz

0

Więc można zastąpić te ustawienia, jeśli to konieczne. Jeśli import był wcześniejszy, właściwości programu Visual Studio miałyby pierwszeństwo. W MSBuild, ostatnia definicja wygrywa i jest używana. To coś dobrego. Czy powoduje błędy? A może po prostu ci się to nie podoba?

+0

Nie podoba mi się to, ponieważ te ścieżki tymczasowe zmieniają się za każdym razem, gdy ponownie załaduję projekt. Bardzo denerwujące, ponieważ kontrola wersji zawsze rzeczy były zmiany we wszystkich projektach. –

0

Podałeś w swoim projekcie. Plik właściwości będzie miał BaseIntermediateOutputPath. Jeśli nie określisz żadnej wartości, będzie pochodzić z bazy.

Pełna pośrednia ścieżka wyjściowa uzyskana z BaseIntermediateOutputPath, jeśli nie określono ścieżki. Na przykład \ obj \ debug. Jeśli ta właściwość zostanie nadpisana, ustawienie BaseIntermediateOutputPath nie wywoła żadnego efektu.

Patrz: http://msdn.microsoft.com/en-us/library/bb629394.aspx

5

te IntermediateOutputPath może być włożona gdy MSBuild podano złą ścieżkę.

W naszym przypadku mieliśmy dodatkowe niepotrzebne ukośniki po rozwiązaniu SolutionDir dla folderów wyjściowych.

Co nie działa na nas (zwróć uwagę na dodatkowy ukośnik):

<OutputPath>$(SolutionDir)\out\bin\</OutputPath> 
<IntermediateOutputPath>$(SolutionDir)\out\obj\</IntermediateOutputPath> 

Co zrobił praca:

<OutputPath>$(SolutionDir)out\bin</OutputPath> 
<IntermediateOutputPath>$(SolutionDir)out\obj</IntermediateOutputPath> 

Aby pomóc rozwiązać ten szczególny przypadek, spróbuj włączyć diagnostycznych i wyjście MSBuild logowanie w menu Narzędzia-> Opcje-> Projekty i rozwiązania-> Utwórz i uruchom-> MSBuild - buduj głośność wyjściową projektu. Następnie wyszukaj wygenerowany folder (np. "Temp").

Używanie wspólnego pliku proj/props/target jest świetnym pomysłem, ale wymaga trochę walki z Visual Studio.

+0

Rozwiązania problemów nie działają dla mnie (Visual Studio 2013). Pliki projektu są modyfikowane przez VS podczas ładowania, a nie podczas budowania, więc diagnostyczne dane wyjściowe kompilacji nie pomagają. – DannyMeister

Powiązane problemy