2011-09-21 2 views
7

To prawdopodobnie najczęściej zadawane pytania, ale nie byliśmy w stanie znaleźć rozwiązania nawet po wielu poszukiwaniach.Przenoszenie elementów kompilujących w msbuild do osobnego pliku?

Mamy wiele plików msbuild, które działają na tym samym zestawie plików źródłowych. (Nie jest to szczególnie istotne, ale kompiluje się na zupełnie inne platformy.) Aby uprościć zarządzanie nimi, chcielibyśmy przenieść nazwy plików źródłowych <Compile> do osobnego pliku i odnieść się do nich ze wszystkich plików msbuild.

Staraliśmy cięcia <ItemGroup> zawierający <Compile> przedmioty i wklejenie go do nowego pliku, a otaczający go

<Project DefaultTargets="Build" ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

a następnie przedstawieniu ten plik z oryginału z

<Import Project="Common.files.csproj" />

ale to nie działa - rozwiązanie otwiera się (z ostrzeżeniem od zhakowania domyślnej konfiguracji), bu • Żadne przedmioty nie pojawiają się w Eksploratorze rozwiązań.

Co robimy źle?

+0

Co się stanie, jeśli wybierzesz "Pokaż wszystkie pliki"? – mellamokb

+1

@mellamokb: to nie powinno mieć znaczenia - Pokaż tylko wszystkie pliki pokazuje, co jest na dysku. Próbowałem tego również, żeby się upewnić. – bright

Odpowiedz

10

Próbowałem z Visual Studio 2010:

1) Utwórz zewnętrznego .proj (lub .target) plików i dodać swoje pliki (użyłem inną nazwę elementu, ale to nie powinno mieć znaczenia)

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <ExternalCompile Include="Program.cs" /> 
     <ExternalCompile Include="Properties\AssemblyInfo.cs" /> 
    </ItemGroup> 
</Project> 

2) Importowanie zewnętrznego pliku .proj na górze pliku projektu Visual Studio:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="MyExternalSources.proj" /> 
    <PropertyGroup> 
    ... 

i modyfikować Compile ItemGroup tak:

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
</ItemGroup> 
... 

Ostrzeżenie: Musisz dodać nowe elementy/pliki do zewnętrznego pliku .proj - Wszystkie przedmioty/pliki dodane od wewnątrz Visual Studio będzie skończyć jak ten :

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
    <Compile Include="MyNewClass.cs" /> 
</ItemGroup> 
... 
+0

Excellent , to działa. Tak, szkoda, że ​​trzeba ręcznie dodawać elementy, ale można je dodać jak zwykle, a następnie przenieść do zewnętrznego pliku przed odprawą. – bright

+0

Próbowałem tej samej techniki z , ale nie wydaje się działać. Czy ktoś wie o sposobie importowania "domyślnego" zestawu treści, np. podczas pracy z istniejącą aplikacją WWW zgodną z OSS. – uniquelau

+0

@uniquelau Właśnie próbowałem i doświadczyłem problemu, gdy pliki znajdują się poza "głównym" folderem projektu. Jak tylko przeniosłem "statyczną" zawartość do folderu projektu, działało to tak samo z grupą "Content" ItemGroup. Moje rozwiązanie jest tak naprawdę tylko obejściem i pokazuje, jak możesz modyfikować pliki projektu VS. Może niestandardowe zadanie po kompilacji może obsłużyć przenoszenie statycznych treści w twojej sprawie. – Filburt

0

Nigdy nie widziałem plików "włącz" do pracy z MSBuild. Oczywiście pliki docelowe działają w ten sposób, ale nie widziałem częściowego pliku msbuild zawartego w innym. Czy używasz metody przedstawionej w tym dokumencie?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

Używanie symboli wieloznacznych to sposób, w jaki rozwiązałem ten problem w przeszłości.

+0

Dzięki, ale nadal nie mogę się doczekać rozwiązania. Może to być ostatnia deska ratunku, jeśli wszystko inne zawiedzie, ale nie jest optymalne. – bright

+0

można również użyć zadania CreateItem w połączeniu z własnym niestandardowym przetwarzaniem plików w celu dodania elementów do grupy Compile ItemGroup w ramach celu BeforeBuild ... http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx –