簡體   English   中英

同一解決方案中其他項目引用的Copylocal dll沒有復制到輸出文件夾中

[英]Referenced Copylocal dll from other project in same solution not copied into output folder

我有一個內部有3個項目的解決方案(1個GUI,1個BLL,1個DAL)。 dal和bll都將EntityFramework和EntityFramework.SqlServer的copylocal設置為true(BLL也引用了copyAL true的DAL)。

GUI引用具有copylocal true的BLL和DAL。

現在,當我將GUI設置為開始項目時,構建過程就可以正常工作了。 然后, EntityFramework.SqlServer 之外 ,調試文件夾中具有所有必需的文件和dll。

我檢查了幾次EntityFramework和EntityFramework.SqlServer是否到處都具有相同的設置...。 我試圖將其手動復制到GUI調試文件夾,然后清除項目.....文件仍然保留,這表明Visual Studio認為該文件不是構建過程的一部分。

因此,我的問題是雙重的:

  1. 是什么原因導致這種現象?
  2. 我該怎么辦?

最初的問題是您對EntityFramework有間接依賴性。 MSBuild無法從您的EXE項目中發現這些程序集是必需的。 但是,它可以從您對BLL和DAL項目的引用中間接發現。

但這並不僅僅是盲目復制那些項目的bin \\ Debug文件夾中存在的所有內容 它查看BLL.dll和DAL.dll文件的元數據,它們包含對完成工作所需的程序集的引用。 在這些DLL上使用ildasm.exe時,您可以看到一些內容。 雙擊清單以進行查看,請注意在此處看到的.assembly指令。 你會看到的:

.assembly extern EntityFramework
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 6:0:0:0
}

但是請注意,您沒有看到EntityFramework.SqlServer的.assembly指令。

那就是錢停止的地方,MSBuild根本無法發現需要此程序集。 換句話說,EntityFramework.SqlServer.dll的作用類似於插件 對於不同的數據庫引擎,有不同的插件。 其中有很多,您可以在Nuget列表中找到它們。

因此,您必須自己復制它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM