Odpowiedzi:
W artykule MSDN dotyczącym właściwości akcji kompilacji wyjaśniono różnice.
Brak - plik nie jest uwzględniony w grupie wyjściowej projektu i nie jest kompilowany w procesie kompilacji. Przykładem jest plik tekstowy zawierający dokumentację, na przykład plik Readme.
Zawartość - plik nie jest skompilowany, ale znajduje się w grupie wyjściowej Treść. Na przykład to ustawienie jest wartością domyślną dla pliku .htm lub innego rodzaju pliku internetowego.
Jedna różnica polega na sposobie ich publikacji; Elementy „Brak” nie są uwzględniane w publikacji, elementy „Treść” tak. na przykład w oknie dialogowym „Pliki aplikacji” na karcie Publikuj.
CopyToOutputDirectory
ustawionym na true
to, zostanie opublikowany wdotnet publish
Nie jestem pewien w 100% (przeczytałem opis właściwości Build Action w witrynie MSDN ), ale samo skopiowanie tej odpowiedzi z MSDN do StackOverflow nie odpowiada mi całkowicie na to pytanie.
Różnica między brakiem a treścią ma wpływ tylko na projekty internetowe. Dla projektu wiersza poleceń, projektu WinForm lub projektu UnitTest (w moim przypadku) itp. None i Content nie mają innego zachowania.
MSDN: „grupa wyjściowa projektu” lub „grupa wyjściowa treści” tylko terminy używane w projekcie sieci Web, prawda?
None
vs Content
ma wpływ tylko na krok publikacji, a nie na krok kompilacji . Wydaje się, że krok kompilacji CopyToOutputDirectory
można ustawić na albo i to kontroluje, czy plik jest kopiowany przez krok kompilacji. Wydaje się również dziwne, że domyślnie szablony T4 są dodawane jako Content
elementy, a nie None
elementy.
W mojej sytuacji mój plik MSBuild zawierał ItemGroup
zasoby obrazu, które wyglądały następująco:
<ItemGroup>
<Content Include="Resources\image001.png" />
<Content Include="Resources\image002.png" />
<Content Include="Resources\image003.png" />
<Content Include="Resources\image004.png" />
<None Include="Resources\image005.png" />
<None Include="Resources\image006.png" />
<None Include="Resources\image007.png" />
</ItemGroup>
Podczas gdy mój projekt był w porządku, zacząłem się zastanawiać, dlaczego mam w sobie mieszankę elementów Content
i None
typów elementów ItemGroup
. Ten artykuł MSDN (dotyczący programu Visual Studio 2010) dał mi wskazówki, których szukałem:
Zauważ, że kiedy edytor zasobów dodaje obraz, ustawia Build Action na None , ponieważ plik resx odwołuje się do pliku obrazu. W czasie kompilacji obraz jest pobierany do pliku Resources utworzonego z pliku resx. Obraz można następnie łatwo uzyskać za pomocą automatycznie wygenerowanej klasy o jednoznacznie określonym typie dla pliku resx. Dlatego nie należy zmieniać tego ustawienia na zasób osadzony , ponieważ spowodowałoby to dwukrotne uwzględnienie obrazu w zestawie.
Rozwiązanie: dzięki tym wskazówkom za pomocą edytora tekstu zmieniłem Content
elementy typu elementu na None
.
Aby zapoznać się z omówieniem elementów programu MSBuild, zobacz ten artykuł MSDN .
Mam projekt, który nie zawiera żadnych elementów do kompilacji (przechowuje html i javascript dla testów jednostkowych jaśminu).
Pewnego dnia moje rozwiązanie (które zawierało wspomniany projekt) przestało się kompilować, mówiąc: „Element docelowy„ Build ”nie istnieje w projekcie”.
Dodałem import, aby wprowadzić kompilator, który działał dobrze na moim komputerze, ale nie udało się użyć msbuild na serwerze kompilacji.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Następnie zmieniłem linię z
<None Include="SpecRunner.html" />
do
<Content Include="SpecRunner.html" />
i działał również na serwerze kompilacji.
Nie potrzebujesz Brak w pliku projektu szablonu, aby uwzględnić pliki zdefiniowane w .vstemplate, w przeciwnym razie zostaną one utracone w procesie tworzenia i tłumaczenia. Zostają pozostawione w folderze tymczasowym, którego używa do zbudowania wszystkiego, a następnie wkrótce zostaną usunięte.
W moim przypadku .Pubxml jest jednym z tych plików na liście Brak . Nie jest przeznaczony do tworzenia rozwiązań ani jako plik statyczny do projektu internetowego. Jednak aby opublikować witrynę na platformie Azure, konfiguracje są obecne w tym.
Zgodnie z artykułem firmy Microsoft są to główne typy, które widzimy wśród tagów plików .csproj :
Brak - plik nie jest uwzględniony w grupie wyjściowej projektu i nie jest kompilowany w procesie kompilacji. Przykładem jest plik tekstowy zawierający dokumentację, na przykład plik Readme.
Kompiluj - plik jest kompilowany do danych wyjściowych kompilacji. To ustawienie jest używane dla plików kodu.
Zawartość - plik nie jest skompilowany, ale znajduje się w grupie wyjściowej Treść. Na przykład to ustawienie jest wartością domyślną dla pliku .htm lub innego rodzaju pliku internetowego.
Zasób osadzony - ten plik jest osadzony w danych wyjściowych kompilacji głównego projektu jako plik DLL lub plik wykonywalny. Zwykle jest używany w przypadku plików zasobów.
Pliki zawartości nie są zawarte w kompilacji, ale są uwzględniane w publikacji.
Żadne pliki nie są uwzględniane w kompilacji ani publikowaniu, chyba że zostały skonfigurowane w ten sposób przez Ciebie. Na przykład ustawienie „Kopiuj do katalogu wyjściowego” na „Zawsze” lub „Nowsze” spowoduje, że zostaną one uwzględnione zarówno w kompilacji, jak i w publikacji.
Content
zmian wNone
s. Myślę, że stało się to, kiedy zmieniłem nazwy plików z .ascx na .cshtml podczas konwersji na Razor. Ręczna zmiana ich z powrotem rozwiązała niektóre problemy z wdrażaniem. Cieszę się, że to znalazłem.