Domanda

Sto cercando di utilizzare il sistema di progetto predefinito di VS08SP1 per richiamare un C # compilazione in modalità x64 esplicita (da non confondersi AnyCpu). Quando ho contrassegnare in modo esplicito un modulo come x64, ho un:

  

avvertimento CS1607: Assemblea generazione - di riferimento assembly 'mscorlib.dll' si rivolge a un processore diverso

Un modo di rimozione che è con un /nowarn:1607. sulla base della mia ricerca , non ci sono problemi, in pratica, con questa operazione. Se qualcuno può HiLight un problema del mondo reale che hanno incontrato, non esitate a rispondere.

Tuttavia, questo si sente solo sbagliato! Così un altro approccio che ho usato è stato quello di fare /nostdlib+, e quindi aggiungere un <Reference> con un <HintPath> hardcoded al mscorlib esplicitamente a 64 bit:

<Reference Include="mscorlib">
  <HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath>
</Reference>

Questo funziona ed è probabilmente meglio (a meno che qualcuno si preoccupa di sottolineare motivi per cui l'approccio precedente è meglio), ma qualcuno può confermare questa è una cosa giusta da fare, si spera citando qualcosa autorevole?

È stato utile?

Soluzione

Ho trovato cambiando framework di destinazione del mio progetto per .NET Framework 4 ha eliminato l'avviso.

Altri suggerimenti

In questo blog ho trovato una proposta che è troppo lungo per copiare interamente qui, ma in breve l'idea può essere descritto con riassunto adattato da questo commento :

Nel file di progetto, è possibile definire una variabile personalizzata nel PropertyGroup per ogni configurazione di generazione. Esempio:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath>
</PropertyGroup>

è sufficiente aggiungere un tag come

<Reference Include="System.Data">
    <HintPath>$(MyCustomPath)</HintPath> 
</Reference>

e quindi utilizzare la macro per definire il percorso di riferimento. È possibile definire MyCustomPath in una posizione diversa per le diverse configurazioni di build (piattaforma e / o debug / release).
Il problema non esisterebbe se MS sosterrebbe questo nel VS UI, ma fino ad allora questo lavoro. Io uso questa tecnica per fare riferimento a diverse versioni dello stesso assembly nel mio di debug e build di rilascio. Funziona alla grande!

Nella recitazione sopra ho recuperato il tag che è stato perso nel Commentarium sorgente e cambiato la formulazione di essere un po 'più dettagliata.


Un interessante pezzo aggiuntivo dal stesso blog :

Ci sono altri modi per farlo, ma richiedono anche uno di modificare manualmente i file di progetto. Un modo è quello di specificare le condizioni per PropertyGroup-sezioni. Questo StackOverflow domanda mette in evidenza l'uso di condizioni.

Credo che la vostra seconda opzione (con esplicito riferimento /nostdlib+) è meglio, perché non sopprimere questo avviso se si dovesse fare riferimento altre assemblee non costruiti sulla stessa piattaforma.

Nel mio caso, ho avuto questo avviso perché ho avuto un mix di progetti x86 e x64 in mia soluzione. Se creo configurazioni di build x86 in tutti i miei progetti, e di destinazione che per la costruzione, gli avvertimenti andare via. Tuttavia, se volevo indirizzare x64 in tutto, credo che avrei dovuto ricostruire il progetto (o seguire i consigli di cui sopra) di rielaborare loro per quadro x64.

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