2009-08-13 69 views
27

我試圖使用VS08SP1的默認項目系統以顯式x64模式(與AnyCpu不同)調用C#編譯。當我明確地標記模塊64,我得到一個:MSBUILD/csc:處理x64的最乾淨的方式mscorlib警告1607

警告CS1607:程序集生成 - 引用程序集「mscorlib.dll中」目標

一種方法去除是一個不同的處理器一個/nowarn:1607Based on my research,這樣做在實踐中沒有問題。如果任何人都能看到他們遇到的現實世界的問題,請隨時回答。

但是,這只是感覺錯誤!所以我用另一種方法是做/nostdlib+,然後添加一個<Reference>用硬編碼<HintPath>到明確的64位mscorlib程序:

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

這個工程和可能是更好的(除非有人關心地指出原因前面方法更好),但是有人可以證實這是一個合適的事情,希望引用某些專利。

+0

我遇到了同樣的問題。會對解決方案感興趣。謝謝。 – decasteljau 2009-10-06 14:13:52

回答

5

我發現通過將項目的目標框架更改爲.NET Framework 4,它消除了警告。

+1

+1但是轉移到不同的CLR和VS是作弊:P(Serioulsy,感謝您花時間回答) – 2011-05-03 23:42:18

+0

最後接受 - 雖然這不能回答真正的問題,但這是我實際上最終使用的解決方案,而我猜測它幾乎是這個生態系統中慣用的「答案」...... – 2012-02-04 08:39:49

+2

這不是以任何方式解決問題的方法。它可能對你有用Todd,但許多項目不能簡單地改變爲針對不同的框架。 – xxbbcc 2012-10-31 15:27:01

3

我相信你的第二個選擇(明確參考/nostdlib+)更好,因爲如果你要引用不是在同一平臺上構建的其他程序集,它不會抑制此警告。

+0

+1洞察力(首先閱讀我不確定)。我會延遲接受挑剔的評級:P(嚴重:我有興趣聽到我的第二種方法的任何消極處理 - 如果沒有缺點,你會認爲它會被VS默認)。不過,我從'msbuild'的角度來看,它有很大的意義,'csc'不應該將所有這個策略直接構建到工具中。 – 2010-11-04 23:59:05

+1

我想不出任何缺點,除非您在x86盒子上進行編譯那可能沒有那個路徑上的程序集。 – 2010-11-05 14:02:45

+0

就msbuild而言(真正的團隊構建),我的偏好是運行在該平臺上構建的每個平臺。 – 2010-11-05 14:03:51

9

In this blog我發現太長,在這裏完全複製,但在很短的想法可以總結改編自this comment描述的建議:

在項目文件中,你可以自定義一個變量在每個構建配置的PropertyGroup部分中。例如:

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

只需添加一個標記如

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

,然後使用宏來定義所述參考路徑。 對於不同的構建配置(平臺和/或調試/發佈),您可以將MyCustomPath定義到不同的位置。
如果MS會在VS UI中支持這個問題,問題就不會存在,但在此之前這將工作。我使用這種技術在我的調試&版本構建中引用相同程序集的不同版本。很棒!

在上面的誦讀中,我找回了源評論欄中丟失的標籤,並將字詞更改得更詳細。


另外一個有趣的一件從same blog

還有一些其他的方法可以做到這一點,但他們也需要一個手動編輯項目文件。一種方法是爲PropertyGroup部分指定條件。這個StackOverflow問題突出了條件的使用。

+0

+1在我的情況下,我實際上並不需要這種技術 - 我總是希望'x64'。仍然讓問題不被接受 - 我想知道微軟會推薦什麼樣的方式來處理內置錯誤(而不必容忍他們可怕的論壇軟件:P) – 2012-02-04 08:37:52

0

在我的情況,我有這個警告,因爲我的解決方案中有x86和x64項目的混合。如果我在我的所有項目中創建x86構建配置,並將其作爲構建目標,則警告消失。但是,如果我想要全部定位到x64,我相信我將不得不重新構建項目(或者按照上面的建議)來爲x64框架重新設計它們。