第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如果在解決方案中使用項(xiàng)目依賴項(xiàng),MSBuild不復(fù)制引用(DLL文件)

如果在解決方案中使用項(xiàng)目依賴項(xiàng),MSBuild不復(fù)制引用(DLL文件)

如果在解決方案中使用項(xiàng)目依賴項(xiàng),MSBuild不復(fù)制引用(DLL文件)我的VisualStudio解決方案中有四個(gè)項(xiàng)目(每個(gè)項(xiàng)目都針對(duì).NET 3.5)-對(duì)于我的問題,只有這兩個(gè)項(xiàng)目很重要:MyBaseProject <- this class library references a third-party DLL file (elmah.dll)MyWebProject 1 <- this web application project has a reference to MyBaseProject我添加了elmah.dll引用MyBaseProject在VisualStudio 2008中,單擊“AddReference.”→“Browse”選項(xiàng)卡→,選擇“elmah.dll”。Elmah引用的屬性如下:別名-全局復(fù)制本地-真文化-描述-用于ASP.NET的錯(cuò)誤日志記錄模塊和處理程序(ELMAH)文件類型-程序集路徑-D:\webs\otherfolder\_myPath\__tools\elmah\Elmah.dll解決-真運(yùn)行時(shí)版本-v2.0.50727指定版本-假?gòu)?qiáng)名稱-假版本-1.0.11211.0在……里面MyWebProject 1我通過以下方式添加了對(duì)ProjectMyBaseProject的引用:“AddReference.”→“Projects”選項(xiàng)卡→選擇“MyBaseProject”。除下列成員外,此引用的屬性相同:描述-路徑-D:\webs\CMS\MyBaseProject\bin\Debug\MyBaseProject.dll版本-1.0.0.0如果我在VisualStudio將elmah.dll文件復(fù)制到我的MyWebProject 1垃圾箱目錄,以及MyBaseProject.dll!但是如果我清理和跑MSBuild對(duì)于解決方案(通過D:\webs\CMS>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe/t:重構(gòu)/p:配置=Debug MyProject.sln)elmah.dll失蹤在MyWebProject 1的bin目錄中-盡管構(gòu)建本身不包含警告或錯(cuò)誤!我已經(jīng)確保MyBaseProject的.csproj包含私元素,其值為“true”(應(yīng)該是“復(fù)制本地“在VisualStudio中):<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">   <SpecificVersion>False</SpecificVersion>   <HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>     **<Private>true</Private>**</Reference>(默認(rèn)情況下,私有標(biāo)記沒有出現(xiàn)在.csproj的XML中,盡管VisualStudio說“復(fù)制本地”為true。我將“復(fù)制本地”切換為假保存-并將其重新設(shè)置為true-保存!)MSBuild有什么問題?如何將(elmah.dll)引用復(fù)制到MyWebProject 1的bin中?我不想在每個(gè)項(xiàng)目的后置命令中添加一個(gè)后期復(fù)制操作!(想象一下,我會(huì)有許多項(xiàng)目依賴于MyBaseProject!)
查看完整描述

3 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

我不知道在VisualStudio和MsBuild之間構(gòu)建時(shí)為什么會(huì)有所不同,但下面是我在MsBuild和VisualStudio中遇到這個(gè)問題時(shí)所發(fā)現(xiàn)的。

解釋

對(duì)于一個(gè)示例場(chǎng)景,假設(shè)我們有項(xiàng)目X、程序集A和程序集B。程序集A引用程序集B,所以項(xiàng)目X包括對(duì)A和B的引用。此外,項(xiàng)目X包括引用程序集A的代碼(例如A.SomeFunction()。現(xiàn)在,創(chuàng)建一個(gè)引用項(xiàng)目X的新項(xiàng)目Y。

因此,依賴鏈如下所示:Y=>X=>A=>B

Visual Studio/MSBuild試圖保持智能,只將引用帶到它檢測(cè)到項(xiàng)目X所需的項(xiàng)目Y中;它這樣做是為了避免項(xiàng)目Y中的引用污染。問題是,由于項(xiàng)目X實(shí)際上沒有包含任何顯式使用程序集B的代碼(例如B.SomeFunction(),VS/MSBuild不會(huì)檢測(cè)到X需要B,因此不會(huì)將其復(fù)制到項(xiàng)目Y的bin目錄中;它只復(fù)制X和A程序集。

您有兩個(gè)解決此問題的選項(xiàng),這兩個(gè)選項(xiàng)都將導(dǎo)致程序集B被復(fù)制到項(xiàng)目Y的bin目錄中:

  1. 在項(xiàng)目Y中添加對(duì)程序集B的引用。
  2. 將虛擬代碼添加到項(xiàng)目X中使用程序集B的文件中。

就我個(gè)人而言,出于幾個(gè)原因,我更喜歡備選方案2。

  1. 如果您以后添加了引用項(xiàng)目X的另一個(gè)項(xiàng)目,您將不必記住也包括對(duì)程序集B的引用(就像您在選項(xiàng)1中所做的那樣)。
  2. 您可以有明確的注釋,說明為什么虛擬代碼需要在那里,而不是刪除它。因此,如果有人無意中刪除了代碼(例如,使用一個(gè)尋找未使用代碼的重構(gòu)工具),您可以從源代碼管理中很容易地看到該代碼是必需的,并進(jìn)行還原。如果使用選項(xiàng)1,而有人使用重構(gòu)工具來清除未使用的引用,則沒有任何注釋;您只會(huì)看到.csproj文件中刪除了引用。

下面是我通常在遇到這種情況時(shí)添加的“虛擬代碼”的示例。

    // DO NOT DELETE THIS CODE UNLESS WE NO LONGER REQUIRE ASSEMBLY A!!!
    private void DummyFunctionToMakeSureReferencesGetCopiedProperly_DO_NOT_DELETE_THIS_CODE()
    {
        // Assembly A is used by this file, and that assembly depends on assembly B,
        // but this project does not have any code that explicitly references assembly B. Therefore, when another project references
        // this project, this project's assembly and the assembly A get copied to the project's bin directory, but not
        // assembly B. So in order to get the required assembly B copied over, we add some dummy code here (that never
        // gets called) that references assembly B; this will flag VS/MSBuild to copy the required assembly B over as well.
        var dummyType = typeof(B.SomeClass);
        Console.WriteLine(dummyType.FullName);
    }


查看完整回答
反對(duì) 回復(fù) 2019-07-01
?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果您沒有在代碼中直接使用程序集,則VisualStudio在嘗試幫助時(shí)檢測(cè)沒有使用它,并且沒有將它包含在輸出中。我不知道您為什么會(huì)看到VisualStudio和MSBuild之間的不同行為。您可以嘗試將構(gòu)建輸出設(shè)置為兩種類型的診斷,并比較結(jié)果,查看其發(fā)散點(diǎn)。

對(duì)于elmah.dll引用,如果沒有在代碼中直接引用它,可以將其作為項(xiàng)目項(xiàng)添加到項(xiàng)目中,并將BuildAction設(shè)置為Content以及輸出目錄的副本到Always.


查看完整回答
反對(duì) 回復(fù) 2019-07-01
  • 3 回答
  • 0 關(guān)注
  • 1278 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)