2017-03-15 6 views
14

Ich habe xproj Kernprojekte auf csproj migriert. Alles funktioniert gut, aber ich habe immer noch Probleme mit der Konfiguration zu veröffentlichen. Basierend auf Dokumentation: https://docs.microsoft.com/en-us/dotnet/articles/core/tools/project-json-to-csproj Ich sollte in der Lage sein, Dateien während der Veröffentlichung auszuschließen.Visual Studio 2017 csproj Kerndatei Ausschluss

Ich habe folgende Zeilen in dem f hinzugefügt

<None Include="*.json" CopyToPublishDirectory="Never" /> 
<None Include="wwwroot\**\*.map;wwwroot\**\*.less;*.pdb" CopyToPublishDirectory="Never" /> 
<None Include="wwwroot\**\*" CopyToPublishDirectory="PreserveNewest" /> 

Aber noch *.map, .json und .less Dateien kopiert werden Ordner zu veröffentlichen. Ich habe verschiedene Reihenfolge ausprobiert, kein Glück.

Wie bestimmte Dateien von der Veröffentlichung ausgeschlossen werden?

+0

Hat Ihr Projekt beginnen mit 'Project Sdk =" Microsoft.NET.Sdk.Web "'? – natemcmaster

Antwort

21

Kurze Antwort: folgende Schnipsel verwenden statt:

<ItemGroup> 
    <Content Update="**\*.map;**\*.less;*.json" CopyToPublishDirectory="Never" /> 
</ItemGroup> 

Sie könnten auch diese Muster auf die "DefaultItemExcludes" Eigenschaft hinzufügen.

<PropertyGroup> 
    <DefaultItemExcludes>$(DefaultItemExcludes);**\*.map;**\*.less;*.json</DefaultItemExcludes> 
</PropertyGroup> 

Lange Antwort:

Microsoft.NET.Sdk und Microsoft.NET.Sdk.Web gehören Einstellungen für Standardelemente. Dies sind Punkte für Objekte in Ihrem Projektordner, die immer kompiliert, eingebettet, zur Ausgabe kopiert werden sollen. Es gibt einige Einstellungen, um dies zu kontrollieren, aber sie sind nicht gut dokumentiert.

Wenn Sie eine metadata value (z. B. die CopyToPublishDirectory-Einstellung) für ein Element ändern möchten, das bereits von einem Standard-Glob enthalten ist, müssen Sie "Update" anstelle von "Include" verwenden.

Um zu sehen, was unter der Haube geschieht, hier sind die Standardelementeinstellungen für Microsoft.NET.Sdk und Microsoft.NET.Sdk.Web

https://github.com/dotnet/sdk/blob/dev15.1.x/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.Sdk.DefaultItems.props#L19-L27

https://github.com/aspnet/websdk/blob/rel/vs2017rtw/src/Web/Microsoft.NET.Sdk.Web.ProjectSystem.Targets/netstandard1.0/Microsoft.NET.Sdk.Web.ProjectSystem.props#L25-L40

+0

Große Antwort, da 'dotnet migrate'-Tool falsch (oder absichtlich) konvertiert, in Elemente vom Typ' None' anstelle von 'Content' ausschließt. Ich sollte beachten, dass das Hinzufügen zur 'DefaultItemExcludes'-Eigenschaft auch Elemente aus dem Solution Explorer ausschließt. Man kann diese Requisiten/Zieldateien finden, die unter dem Ordner "% ProgramFiles (x86)% \ Microsoft Visual Studio \ 2017 \ \ MSBuild \ Sdks" installiert sind. – Vertigo

+0

' $ (DefaultItemExcludes); ** \ *. Map; ** \ *. Js' um automatisch generierte Dateien auszuschließen -> ähnlich wie 'settings.json' in VS-Code' files.exclude ' – SliverNinja

+0

Gibt es keine Möglichkeit von UI, es zu setzen? Ich kann nlog.config nicht veröffentlichen – doker

Verwandte Themen