web-dev-qa-db-de.com

Datei als Verknüpfung in Visual Studio hinzufügen - Debug vs Publish

Jedes Mal, wenn ich eine Datei in ein ASP.NET-Projekt als Link verlinken muss, vergesse ich immer etwas zu tun, da Visual Studio viel zu fehleranfällig und ärgerlich ist .. .. Da gibt es einen Fehler/eine Einschränkung Die Datei wird nicht in den Debug-Ausgabeordner kopiert, und wir müssen die Eigenschaften der Datei ändern, damit sie auch in den Publish-Ausgabeordner kopiert wird.

Ich habe dies nach langer Recherche auf die harte Tour gelernt und ein AfterBuild-Ziel erstellt, um diesen Prozess zu vereinfachen. Beim Hinzufügen der Datei ist jedoch noch einige manuelle Arbeit zu erledigen.

Hier ist ein Beispiel für ein Projekt, das ich betreue. Angenommen, wir möchten die Datei YIUCARD im Ordner "Dienstprogramme" des ASP.NET-Projekts hinzufügen.

1) Klicken Sie mit der rechten Maustaste auf den Ordner "Dienstprogramme" in Visual Studio und wählen Sie "Hinzufügen -> Vorhandenes Element".

Step 1

2) Wählen Sie die hinzuzufügende Datei aus und klicken Sie EINMAL darauf (doppelklicken Sie nicht).

Step 2

3) Klicken Sie in den Pfeil neben der Schaltfläche "Hinzufügen" und wählen Sie "Als Link hinzufügen".

Step 3

Im Moment wird dies nichts tun. Die Datei wird nicht in einen Ordner kopiert (Debug und Publish). Es wird nur zum Projekt hinzugefügt. 

4) Klicken Sie mit der rechten Maustaste in die Datei und öffnen Sie Eigenschaften.

Step 4

5) Ändern Sie: "Build-Aktion" in "Inhalt" "In Ausgabeverzeichnis kopieren" in "Immer kopieren".

Step 5

Zu diesem Zeitpunkt wird die Datei in den Veröffentlichungsordner "Publish" kopiert (an einer beliebigen Stelle, die wir beim Publizieren definieren) .. Wenn wir jedoch lokal debuggen (F5), funktioniert sie nicht, da die Datei nicht in das lokale Verzeichnis kopiert wird. Dienstprogramme “auf der Codebasis.

6) Speichern Sie die Änderungen in Visual Studio, indem Sie „Alle speichern“ wählen. Dies ist so, dass die ".csproj" -Datei gespeichert wird, da wir Änderungen daran vorgenommen haben, und wir werden sie nun manuell bearbeiten.

Step 6

7) Öffnen Sie die ".csproj" in Notepad ++.

Step 7

8) Füge die Datei zum "BeforeBuild" -Ereignis hinzu (hier ist meine):

Step 8

 <Target Name="BeforeBuild">
    <ItemGroup>
      <UtilitiesFiles Include="..\path\to\file\REDOPXX.NEW" />
      <UtilitiesFiles Include="..\path\to\file\REDFMTST" />
      <UtilitiesFiles Include="..\path\to\file\JOBCARD" />
      <UtilitiesFiles Include="..\path\to\file\YIUCARD" />
    </ItemGroup>
    <Copy SourceFiles="@(UtilitiesFiles)" DestinationFolder=".\utilities" SkipUnchangedFiles="true" />
  </Target>

9) Ich habe ein "AfterBuild" -Ereignis für den Freigabemodus, das das Projekt automatisch für mich veröffentlicht, sodass die Dateien direkt in den gewünschten Ausgabeordner verschoben werden:

  <Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' ">
    <PropertyGroup>
      <OutputDir>..\path\to\publish\MyProject</OutputDir>
    </PropertyGroup>
    <Message Importance="High" Text="Output DIR: $(OutputDir)" />
    <RemoveDir Directories="$(OutputDir)" ContinueOnError="true" />
    <MSBuild Projects="MyProject.csproj" Properties="Configuration=$(Configuration);WebProjectOutputDir=$(OutputDir);OutDir=$(OutputDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
  </Target>

10) Speichern Sie die Datei in Notepad ++ und laden Sie sie erneut in Visual Studio.

Step 10

Wenn Sie das Projekt erstellen, wird die Datei in die Ordner Debug und Release/Publish kopiert!

Ich würde jedoch gerne wissen, ob es einen einfacheren/intuitiveren Weg gibt, dies zu tun.

Sie können sagen, dass dies behoben werden würde, wenn Sie den Debug-Ausgabeordner in den gleichen Ordner wie Release/Publish ändern, so dass die Dateien nach der ersten Veröffentlichung dort vorhanden wären .. __ Beachten Sie jedoch, dass ein Fehler vorliegt damit auch. Wenn ich einen anderen Ausgabeordner als "bin \" verwende, werden sich aspx-Dateien beschweren, dass sie die Assemblys nicht finden können. Selbst wenn ich für "In Ausgabeverzeichnis kopieren" die Option "Immer kopieren" einstellt, wird beschwert, dass "Global.asax.cs" nicht gefunden werden konnte.

Bitte sehen Sie diese verwandten Fragen:

Parser-Fehlermeldung: Typ "TestMvcApplication.MvcApplication" konnte nicht geladen werden

"Typ [Namespace] .Global konnte nicht geladen werden", verursacht Trauer

Wurde dies in den neueren Versionen von Visual Studio behoben/verbessert?

34
Nuno

Das MSBuild.WebApplication.CopyContentLinkedFiles NuGet kann Ihnen dabei helfen. Dieses Paket fügt ein MSBuild-Ziel hinzu, das alle Inhaltsdateien, die als Link hinzugefügt wurden, während des Builds in den Webanwendungsordner kopiert.

10
Dejan

Ich denke, eine der besten Möglichkeiten ist, einen symbolischen Link zu erstellen, wie Sie möchten ... Es ist hilfreich für die Verwaltung von Dateien, die immer gleich sein müssen.

0
jornathan

Wenn das Ziel darin besteht, Inhaltsordner (z. B. Skripts, Bilder) einzuschließen, sollten Sie die einzelnen Dateien nicht verwalten. Beziehen Sie diese Ordner stattdessen in Ihre Build- und Veröffentlichungsdateien ein. 

Wenn Dateien hinzugefügt oder entfernt werden müssen, aktualisieren Sie sie einfach im Inhaltsordner. Dies ist im Wesentlichen der Umgang mit Hilfedateien, da diese nicht von den Entwicklern verwaltet werden. 

Schauen Sie sich diese Links an:

Gibt es eine Möglichkeit, Inhaltsdateien automatisch in die asp.net-Projektdatei aufzunehmen?

ASP.NET-Webbereitstellung mit Visual Studio: Zusätzliche Dateien bereitstellen

0
Keith