2012年7月20日 星期五

專案參考X86跟X64的dll

20110910015.jpg
Visual Studio 2010在建置專案時需要選擇建置平台

若有參考到第三方元件(Third party)時

通常會根據第三方元件來調整建置平台

但若是第三方元件有分X86跟X64版本

每次切換建置平台就得重新參考第三方元件的dll,實在是非常麻煩!!

為了不想再浪費時間在重新參考上面

上網找了一下

大致有兩種方法可用

第一種:修改專案檔(.csproj)來做控制

用記事本開啟你的專案檔

然後修改裡面Reference的部分


假設你現在參考了一個叫做"Emgu.CV"的dll

原本的內容大概會顯示如下:

<Reference Include="Emgu.CV">     
     <HintPath>..\..\..\EMGUCV\X64\Emgu.CV.dll</HintPath>
</Reference>
這時參考的dll就是固定在\EMGUCV\X64\資料夾裡

然後把它改成如下:

<Reference Include="Emgu.CV" Condition="$(Platform) == 'x86'">     
     <HintPath>..\..\..\EMGUCV\X86\Emgu.CV.dll</HintPath>
</Reference>
<Reference Include="Emgu.CV" Condition="$(Platform) == 'x64'">     
     <HintPath>..\..\..\EMGUCV\X64\Emgu.CV.dll</HintPath>
</Reference>
他就會根據你的建置平台來改變參考位置

這樣就能夠輕鬆解決每次切換不同建置平台

卻要手動重新加入參考的麻煩!!


第二種:新增建置事件

此種方法不用記事本去修改專案檔

而是修改專案的屬性裡的建置事件

加入建置前事件命令列的條件:

xcopy /s /e /y "$(SolutionDir)..\EMGUCV\$(PlatformName)\*.dll" "$(SolutionDir)..\EMGUCV\references"
這是什麼意思呢!?

就是在建置專案前,根據你的建置平台,假設是x86

就會把存放於EMGUCV\x86\裡面的dll檔,複製到EMGUCV\references\這個目錄下
($(PlatformName)會根據你的建置平台改變)

所以只要將你的專案的參考指向這個EMGUCV\references\目錄裡的dll即可

就可以保障你在建置前,參考到對的dll
(因為在建置前,就會把隊的dll都copy過去!)


這兩種方法有好有壞

第一種方法若是重新參考dll

就得重新用記事本去修改專案檔

第二種方法若是遇到所參考的dll很多,檔案很大時

建置前的複製過程就會很久

若是你有很多專案都如此使用的話

建置起來的時間會相當可觀!!


所以就根據自己的情況

選擇理想的方法來用吧!!

這樣至少在方案的組態管理員中切換建置平台後

就可以直接建置,並參考到對的dll !!

沒有留言:

張貼留言