2013-09-23 27 views
22

Ogni volta che devo collegare un file in un progetto ASP.NET come collegamento, c'è sempre qualcosa che dimentico di fare, perché Visual Studio è troppo buggato e fastidioso con questi. C'è un bug/limitazione con esso in modo che non copi il file nella cartella di output di Debug, e dobbiamo cambiare le proprietà del file in modo che venga copiato anche nella cartella di output Pubblica.Aggiungi file come collegamento su Visual Studio - Debug vs Publish

Ho imparato questo nel modo più difficile, dopo molte ricerche, e ho creato un obiettivo AfterBuild per aiutare a semplificare questo processo. Tuttavia, c'è ancora del lavoro manuale da fare quando si aggiunge il file.

Ecco un esempio per un progetto che mantengo. Supponiamo di voler aggiungere il file YIUCARD nella cartella "utilità" del progetto ASP.NET.

1) Fare clic con il pulsante destro del mouse sulla cartella "Utilità" su Visual Studio e selezionare "Aggiungi -> Elemento esistente".

Step 1

2) Selezionare il file da aggiungere, cliccando su di esso una sola volta (non doppio clic).

Step 2

3) Fare clic sulla freccia accanto al pulsante “Aggiungi” e selezionare “Aggiungi Come Link”.

Step 3

Al momento, questo non farà nulla. Il file non verrà copiato in alcuna cartella (Debug and Publish). È appena aggiunto al progetto.

4) Fare clic con il tasto destro nel file e aprire Proprietà.

Step 4

5) Modifica: “Build Azione” a “Contenuto” “Copia Output Directory” a “Copia sempre”

Step 5

A questo punto, il file verrà essere copiati nella cartella di output di pubblicazione (ovunque che definiamo durante la pubblicazione). Tuttavia, quando eseguiamo il debug localmente (F5), non funzionerà perché il file non è copiato nella cartella "utilità" locale nella base di codici.

6) Salvare le modifiche su Visual Studio, selezionando "Salva tutto". Questo è così che il file ".csproj" viene salvato, poiché abbiamo apportato delle modifiche e ora lo modificheremo manualmente.

Step 6

7) Aprire il “Csproj” di Notepad ++.

Step 7

8) Aggiungere il file alla manifestazione "BeforeBuild" (qui è mio):

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) Ho un evento "AfterBuild" per la modalità di rilascio che pubblica automaticamente il progetto per me, in modo che i file vengano inviati direttamente alla cartella di output che desidero:

<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) Salvare il file in Notepad ++ e ricaricarlo su Visual Studio.

Step 10

Quando si genera il progetto, il file verrà copiato sia Debug e Release/pubblicare cartelle!

Tuttavia, mi piacerebbe sapere se c'è un modo più semplice/intuitivo per farlo.

Si potrebbe dire che questo sarebbe stato corretto cambiando la cartella di output di Debug allo stesso modo della cartella Release/Publish, in modo che i file sarebbero lì dopo la prima volta che ho pubblicato. Tuttavia, si noti che c'è anche un bug in questo. Se utilizzo una cartella di output diversa da "bin \", i file aspx si lamenteranno di non riuscire a trovare gli assembly. Anche se imposto "Copia nella directory di output" su "Copia sempre", si lamenterà che "Global.asax.cs" non è stato trovato.

Da queste domande correlati:

Parser Error Message: Could not load type 'TestMvcApplication.MvcApplication'

"Could not load type [Namespace].Global" causing me grief

È questo il fisso/migliorati nelle versioni più recenti di Visual Studio?

risposta

0

Se l'obiettivo è includere cartelle di contenuto (ad esempio script, immagini), non è necessario gestire i singoli file. Invece, includi queste cartelle nella tua build e pubblica i file.

Quando è necessario aggiungere/rimuovere i file, è sufficiente aggiornarli nella cartella dei contenuti. Questo è essenzialmente il modo in cui gestiamo i file della Guida poiché non sono gestiti dagli sviluppatori.

Guarda anche questi link:

Is there a way to automatically include content files into asp.net project file?

ASP.NET Web Deployment using Visual Studio: Deploying Extra Files

+0

Ciao Keith.Non è questo il problema che sto descrivendo, ma grazie per il suggerimento comunque :) – Nuno

4

Il MSBuild.WebApplication.CopyContentLinkedFiles NuGet potrebbe aiutarti. Questo pacchetto aggiunge una destinazione MSBuild che copia tutti i file di contenuto aggiunti come collegamento alla cartella dell'applicazione Web durante la compilazione.

+0

Sì, ho avuto lo stesso problema, con 404 errori per un file css "Aggiunto come collegamento" (non chiedere perché - 1 sln, 3 web progetti, 4 file css identici) e questo pacchetto di nuget ha sollevato il problema solo da dandy. –

0

Penso che uno dei modi migliori sia creare un collegamento simbolico che vuoi. Ti sarà utile gestire il file che deve sempre essere uguale.

Problemi correlati