我有一個C#Visual Studio項目(.csproj),它具有對Framework32版本System.Data
的引用。當我嘗試在另一臺機器上使用MSBuild/Team Foundation Server(TFS)構建時,由於64位DLL不存在而失敗。.NET的'任何CPU'項目都綁定到Framework或Framework64 DLL嗎?
我應該綁定到Framework版本,還是這會限制我在64位機器上運行?如果可能,.NET重定向綁定是否使用64位?
我有一個C#Visual Studio項目(.csproj),它具有對Framework32版本System.Data
的引用。當我嘗試在另一臺機器上使用MSBuild/Team Foundation Server(TFS)構建時,由於64位DLL不存在而失敗。.NET的'任何CPU'項目都綁定到Framework或Framework64 DLL嗎?
我應該綁定到Framework版本,還是這會限制我在64位機器上運行?如果可能,.NET重定向綁定是否使用64位?
我想你的意思是在你的問題中的任何CPU,是否正確?假設情況是這樣的話,幾乎在所有情況下都要遵循約束而不考慮位數。
回想一下,.NET代碼JITed(及時編譯) - 這意味着32位和64位代碼了C#或VB.NET編譯器是相同的,無論您打算什麼架構上運行。當代碼在運行時被JITed時,它變成了32或64位。
在某些情況下,您必須介意目標架構。一個特定的情況是對COM-包裝器DLL,.NET Framework提供的或其他的任何引用/依賴關係。這是因爲如果這些DLL文件未被標記爲32位,那麼這些DLL文件將被標記(在COM的情況下)爲僅32位(如COM是32位唯一架構),則與COM的互操作將不起作用。因此,由於它們被明確標記,您的項目產出也應該如此。
那麼爲什麼框架中有64位和32位的DLL。他們是否預先優化了JITed?或者它們是否經過優化以調用32位/ 4位「WIN32」API? – 2008-11-26 06:42:34