2010-11-12 7 views
11

Utilizzando un'applicazione Web ASP.net di Visual Studio 2010, ho diversi progetti che condividono alcuni file JavaScript/css. Il modo più logico con cui condividono questi file consiste nel posizionare i file in una singola cartella e ogni progetto li include con l'opzione "Aggiungi come collegamento". Tuttavia, se aggiungo i file in questo modo quando eseguo il debug utilizzando il server di sviluppo di Visual Studio o eseguendo il debug utilizzando un server Web IIS locale, tutte le richieste di questi file restituiscono errori 404 non rilevati. Se pubblico il sito, i file vengono copiati, ma ovviamente non aiuta il debug."Aggiungi come collegamento" per i file JavaScript che restituiscono 404 nel debug

C'è qualcosa che mi manca o si tratta di un difetto da parte di VS?

risposta

4

In realtà non lo chiamerei un errore, dal momento che hai richiesto questo comportamento: linked items nei progetti di Visual Studio sono effettivi link a file esterni. Questi file possono risiedere ovunque sul disco e non vengono copiati nella cartella del progetto.

È possibile copiare questi file localmente durante uno pre-build event. In questo modo, i file rimarranno sincronizzati e non li duplicherete fino alla prima compilazione.

+8

Bene, dal momento che l'ho aggiunto al progetto come collegamento, quando richiedo il collegamento dovrei essere reindirizzato alla fonte invece di VS che restituisce 404 durante il debug. Questo è il motivo per cui è un difetto da parte di VS non gestire correttamente un documento collegato. Ho provato a copiare manualmente il file nella cartella e questo restituirà il documento, ma questo non è qualcosa che dovrei fare. Per prima cosa sconfigge lo scopo di un documento collegato. – Matt

+0

@Matt, non esiste ancora alcuna funzione per eseguire questo tipo di reindirizzamento. Suppongo che potresti chiamarlo un difetto :) –

+3

È un peccato. Ho alcuni file css e js che sono condivisi tra i progetti e senza questa funzione che funziona in tutti i sensi significa codice duplicato e passaggi aggiuntivi. Oh bene. – Matt

-2

Selezionare il collegamento in Esplora soluzioni, quindi esaminare la finestra delle proprietà e impostare Copia su directory di output su Copia sempre. Gli elementi collegati sono impostati su Non copiare per impostazione predefinita.

BTW, è possibile copiare molti file come collegamenti molto facilmente direttamente da Solution Explorer quando si utilizza l'estensione VSCommands 2010.

+6

Il problema è "Directory di output" è la cartella bin. Copiarli nella cartella bin non aiuta quando devono essere nella cartella Styles o Scripts affinché le richieste http funzionino. – Matt

11

Per risolvere questo problema qualche tempo fa ho creato un pacchetto nuget 'MSBuild.WebApplication.CopyContentLinkedFiles'. Questo pacchetto aggiunge la destinazione MsBuild che copia tutti i file di contenuto aggiunti come collegamento alla cartella del progetto durante la compilazione.

Nota: se si utilizza il controllo del codice sorgente, è preferibile aggiungere i file copiati (dalla cartella Applicazioni Web) all'elenco di elementi da ignorare.

+1

Grazie! Questo ha funzionato esattamente come previsto! – cgatian

0

Il problema sembra essere che il sito Web viene eseguito direttamente dalle cartelle di origine, anziché dalla cartella bin. Ciò significa che il file sarà mancante, indipendentemente dal fatto che venga copiato o meno nella cartella di output.

È probabile che l'esecuzione da un server Web locale o remoto non avrebbe questo problema, anche se non ho funzionato, e preferirei non aggiungere IIS al mio computer locale se non è necessario.

L'aggiunta di un comando di copia pre-build ha funzionato. Si noti che la directory corrente sarà la cartella bin. (Puoi usare cd per echo la directory corrente alla finestra di costruzione se vuoi vederlo):

Se il file è in un'altra soluzione, il tuo comando sarà simile a qualcosa (tre .. s: uno per uscire da ciascuno di bin, progetto e le cartelle di soluzione):

copy ..\..\..\OtherSolution\OtherProject\Scripts\MyJSFile.js ..\Scripts\ 

Se è nella stessa soluzione, ma un progetto diverso:

copy ..\..\OtherProject\Scripts\MyJSFile.js ..\Scripts 

un problema minore è che il link al file si scontrerà con la nuova copia del file, e ven se non lo aggiungi al tuo progetto.Finché si crea il collegamento per primo, sembra che funzioni. Se hai prima copiato il file, dovrai eliminare manualmente la copia, quindi aggiornare il Solution Explorer prima di poter aggiungere il link.

Problemi correlati