Domanda

Ogni volta che creo o pubblico un sito Web, Visual Studio tenta di controllare il file web.config in modo che possa aggiungere numerosi assembly non necessari.

In altre parole:

web.config prima di:

<configuration>
   <system.web>
      <compilation>
         <assemblies>
         </assemblies>
      </compilation>
   </system.web>
</configuration>

web.config dopo:

<configuration>
   <system.web>
      <compilation>
         <assemblies>
             <add assembly="Microsoft.ReportViewer.Common... />
             <add assembly="Microsoft.ReportViewer.WinForms... />
             <add assembly="System.DirectoryServices... />
             <add assembly="System.Windows.Forms... />
             <add assembly="ADODB... />
             <add assembly="System.Management... />
             <add assembly="System.Data.OracleClient... />
             <add assembly="Microsoft.Build.Utilities... />
             <add assembly="Microsoft.ReportViewer.ProcessingObjectModel... />
             <add assembly="System.Design... />
             <add assembly="Microsoft.Build.Framework... />
         </assemblies>
      </compilation>
   </system.web>
</configuration>

Nessuno di questi assembly è richiesto e la maggior parte non esiste nei server di test di destinazione o di produzione.

Continuo a eliminarli ogni volta che costruisco, ma sta diventando reale fastidioso molto velocemente.

In questo momento la mia soluzione alternativa è di lasciare web.config in sola lettura, quindi Visual Studio non può aggiungere assembly ad esso.


Aggiornamento

Schermate come prova:

Pagine delle proprietà del progetto prima :

 link text

Web.Config prima:

 alt text

Pagine delle proprietà del progetto dopo:

 alt text

Web.config dopo:

 alt text

Aggiornamento due

Va ??sottolineato esplicitamente che il sito web funziona senza l'aggiunta di questi riferimenti estranei. La mia soluzione temporanea è mantenere web.config di sola lettura e premere Annulla ogni volta che Visual Studio si lamenta che è di sola lettura mentre tenta di modificarlo. Se riesco a impedire a Visual Studio di provare a modificarlo in primo luogo ...


Aggiornamento tre

Sembra che non sia possibile. Qualcuno può sentirsi libero di dare la risposta corretta, " Non puoi impedire a Visual Studio di aggiungere assembly al tuo web.config . & Quot; e lo segnerò.

L'unica ragione per cui sto mantenendo la domanda è che si spera che qualcuno conosca l'opzione super segreta, la chiave di registro, o l'impostazione del progetto o della soluzione, per dire a Visual Studio di smettere di pensare.


Aggiornamento quattro

Non ho accettato la risposta accettata e l'avrei accettata se potessi. Sto ancora sperando nella panacea. Ma in questo momento mi sto sporgendo verso:

  • Risposta: impossibile da fare ( manu08 )
  • Soluzione alternativa: chiave di registro degli assembly GAC filtrati ( Nebakanezer )

Come posso impedire a Visual Studio di aggiungere assembly al mio web.config?

Riferimenti

È stato utile?

Soluzione

Ho usato VS2005 per modificare un .net 1.1 (VS2003) .aspx e l'ho salvato, quindi web.config avrà misteriosamente la rete. 2.0 assiemi aggiunti:

Se ho usato VS2008 o VS2010, questo non succede. Quindi credo che questo sia un bug nell'IDE VS2005.

Altri suggerimenti

Forse la " Avatar DotNet Library " fa riferimento a tali assemblee da solo. I riferimenti di un assembly di riferimento sono necessari per distribuire correttamente un progetto. Altrimenti, come potrebbe funzionare l'assembly di riferimento?

Nota che è possibile che il tuo assieme di riferimento non usi i propri riferimenti, sebbene esistano.

Modifica: puoi utilizzare l'ottimo strumento ".Net Reflector" per controllare questo.

Ho riscontrato questo problema con Visual Studio 2005 (ma sono felice di segnalare che la soluzione funziona per VS 2008, vedere il testo in grassetto di seguito). Esiste una sezione del registro che VS verifica prima di aggiungere gli assembly al file web.config.

Ecco la chiave:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences

Supponiamo quindi che non desideri che Visual Studio aggiunga l'assembly Microsoft.VisualStudio.Designer.Interfaces al tuo web.config. Aggiungi la seguente voce al registro e sei pronto.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences\Microsoft.VisualStudio.Designer.Interfaces

Ha funzionato perfettamente per me. E sì, il resto della tua squadra dovrà fare lo stesso, ma almeno non dovrai rimuovere manualmente le voci ogni volta :)

Per farlo funzionare per VS 2008 - basta cambiare 8.0 nel percorso del registro in 9.0

Converti " Sito Web " proiettare su una "Applicazione Web" progetto.

Un sito Web " non ha un file di progetto, quindi contiene tutti i riferimenti di assembly in web.config. Un "Progetto Web" ha un file di progetto e tutti i riferimenti sono memorizzati nel file di progetto.

Rimuovi i riferimenti.

  • Se è un'app Web: puoi vedere i riferimenti in Esplora soluzioni .

  • Se si tratta di un sito Web: fai clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, quindi seleziona Pagine delle proprietà . Gestiscili lì.

HTH

Se un assembly condiviso fa riferimento a loro, verranno aggiunti anche al progetto chiamante.

Poiché la libreria Avatar fa questi altri riferimenti, Visual Studio aggiunge questi riferimenti anche al progetto principale. Altrimenti, una chiamata nella libreria Avatar potrebbe non riuscire poiché manca il riferimento di cui ha bisogno.

Beh, questo potrebbe sembrare un hack ma, date le tue esigenze, un'altra opzione sarebbe quella di caricare dinamicamente l'assembly Avatar usando Assembly.Load o LoadFrom in fase di runtime. Ciò manterrebbe un riferimento fuori dal progetto principale e dovrebbe quindi impedire le righe di riferimento extra in web.config. Questo sarebbe davvero pratico solo se usassi solo un piccolo numero di classi dal progetto Avatar. Farei un terzo progetto a cui entrambi i progetti facevano riferimento che conteneva interfacce implementate da una o più classi Avatar affinché il progetto principale mantenga una tipizzazione rigorosa durante la gestione delle istanze Avatar. Ammetto che questo potrebbe essere molto più lavoro che in precedenza ha inviato risposte. Se sei interessato a questo metodo, cerca su Google la creazione di plugin in .Net

Finché stai usando un sito Web, piuttosto che una webapp, non conosco alcun modo per impedire a Visual Studio di aggiungere assembly al tuo web.config. Questo stesso problema si presenta anche per le soluzioni della mia azienda.

Non puoi impedire a Visual Studio di aggiungere assembly al tuo web.config.

Siamo spiacenti, non puoi impedire a Visual Studio di aggiungere assembly al tuo web.config , ma non tutto è perduto.

L'ho colpito in passato; qualcuno aveva aggiunto alcuni riferimenti (incluso WinForms) a un assembly di accesso ai dati di basso livello. Il sito web ha utilizzato l'assembly di accesso ai dati di basso livello e pertanto WinForms ecc è stato aggiunto al file web.config.

La soluzione era spostare il suo codice nell'assemblaggio corretto e rimuovere il riferimento errato.

Se non riesci a ordinare come l'assembly che ha i riferimenti indesiderati e sai che non stai chiamando il codice che dipende dai riferimenti indesiderati. Quindi puoi (nessuno di questi è carino)

  • Scrivi un'azione di installazione personalizzata che automatizza la rimozione di questi riferimenti di assembly indesiderati dal web.config
  • Scrivi un'azione personalizzata MSBUILD da rimuovere quindi al momento della compilazione
  • Usa un altro file web.config scritto a mano quando l'applicazione è installata.

Possono essere necessari secoli per scoprire come Visual Studio sta aggiungendo un riferimento al file web.config. È necessario controllare manualmente OGNI assembly utilizzato direttamente o indirettamente dal sito Web.

Conosco e apprezzo il motivo per cui Microsoft ha inventato i siti Web in ASP.NET 2.0, ma a volte semplicemente succhia . Se è pratico per te, converti il ??tuo sito in un progetto di applicazione Web e problemi come questo andranno via.

Se ciò non è pratico per te, prova a ricodificare più codice possibile in un progetto di libreria di classi separato. Eventuali riferimenti che è possibile spostare fuori dal sito Web e nella libreria di classi verranno ridotti alle modifiche web.config .

EDIT: Per chiarire, in un sito Web, il compilatore aspnet compila tutto (markup, code-behind, lotto), quindi tutti i riferimenti di assembly devono andare in web.config . Tuttavia, in un progetto di applicazione Web, il compilatore C # o VB compila i file code-behind in una DLL separata, a cui fa quindi riferimento il compilatore aspnet quando compila il markup. In questo scenario, gli assembly a cui si fa riferimento solo nei file code-behind andranno nella DLL code-behind e non toccheranno affatto web.config . Solo gli assembly a cui viene fatto direttamente riferimento nel markup andranno in web.config .

Non credo che tu possa impedire a Visual Studio di aggiungere automaticamente riferimenti agli assembly a cui fanno riferimento altri.

Una soluzione è creare un progetto di installazione Web con un'azione personalizzata che automatizza la rimozione di questi riferimenti di assemblaggio indesiderati dal web.config .

Questi sono tutti gli assemblaggi richiesti dal tuo progetto, in qualche forma o maniero e aiutano la compilazione che ASP.NET fa sulle tue pagine in fase di esecuzione. Probabilmente vengono importati dal codice che stai usando nel tuo progetto o da un'altra libreria che li sta usando.

Ma secondo la documentazione . Questi sono gli assembly definiti nel tuo web.config globale che puoi trovare in C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG :

<assemblies>
    <add assembly="mscorlib" />
    <add assembly="System, ..." />
    <add assembly="System.Configuration, ..." />
    <add assembly="System.Web, ..." />
    <add assembly="System.Data, ..." />
    <add assembly="System.Web.Services, ..." />
    <add assembly="System.Xml, ..." />
    <add assembly="System.Drawing, ..." />
    <add assembly="System.EnterpriseServices, ..." />
    <add assembly="System.Web.Mobile, ..." />
    <add assembly="*" />
</assemblies>

Se guardi, è stato aggiunto un riferimento assembly = " * " . E se leggi la documentazione su questo comando dice:

  

Facoltativamente, è possibile specificare il   carattere jolly asterisco (*) da aggiungere   ogni assemblea all'interno del privato   cache di assembly per l'applicazione,   che si trova in \ bin   sottodirectory di un'applicazione o in   installazione di the.NET Framework   elenco   (% SystemRoot% \ Microsoft.NET \ Framework \ version).

Ciò significa che qualsiasi assembly nella directory / bin o nella directory di installazione di .NET Framework verrà già incluso.

Ciò che mi dice del tuo problema è che quegli assiemi che sono stati inclusi fanno già riferimento in qualche modo al tuo progetto. E probabilmente provengono dalla Avatar Dot Net Library o da alcuni controlli sulla tua pagina. Controlla i riferimenti " Riferimenti " cartella nel progetto Visual Studio nella Libreria Avatar per questi riferimenti che non desideri. Perché è qui che il processo di generazione ottiene queste librerie.

Quindi, in altre parole, se non vuoi che vengano inclusi, strofina i tuoi progetti referenziati di tutti i riferimenti di queste librerie.

In alternativa puoi usare un parser XML di MSBuild per eliminare quella sezione di web.config ogni volta che esegui il processo di compilazione. Personalmente utilizzo un'attività chiamata XmlUpdate per modificare alcune parti del mio web.config per prepararlo alla produzione. Se desideri fare lo stesso, fa parte delle Attività della community di MSBuild .

Se si esegue su un computer Vista o Server 08, è possibile utilizzare l'utilità della riga di comando appcmd per rimuoverlo dopo la ricostruzione anziché rimuoverlo manualmente.

http://technet.microsoft.com/ it-it / library / cc772200 (WS.10) aspx http://learn.iis.net/page.aspx / 114 / getting-iniziato-con-appcmdexe /

vedi http://msdn.microsoft.com/en-us/ biblioteca / ms178728.aspx

qui è spiegato che ciò che vedi nella Pagina delle proprietà non è tutto, i riferimenti impliciti esistono anche nel file Machine.config e vengono aggiunti in fase di compilazione. Spero che questo aiuti.

Vorrei iniziare controllando " usando " istruzioni nei file di codice e qualsiasi riferimento nei file .aspx, .ascx. Sembra che tu abbia fatto riferimento ad alcuni di questi (so che alcuni sono aggiunti per impostazione predefinita dai modelli Aggiungi nuovo elemento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top