2011-09-05 66 views
7

我有ProjectA(WPFApplication)引用ProjectB(ClassLibrary)。 Inside ProjectB我有wpf窗口,使用從控制ThirdParty.dll至於我相應從項目B引用。未複製引用的庫

的問題是,它不項目A的輸出文件夾和XAML解析運行exceprion中找到ThirdParty.dll提高。 GAC中沒有ThirdParty.dll。 本地複製設置爲true。 它的工作原理,如果我手動添加輸出文件夾的ProjectA該庫,它也可以,如果我使用ThirdParty.dll somwhere權利在我的cs文件。

我該如何解決這個問題?

+7

查看引用的屬性並檢查Copy Local是否設置爲true。 – albertjan

+1

@the_ajp:你應該添加一個答案 –

+0

複製本地是真實的。 –

回答

4

原因是,如果設置了「複製本地」,Visual Studio只會將資源複製到輸出文件夾。只需設置複製本地的參考,你應該沒問題。

看看這個link如何工作。

當您引用ProjectA時,不會自動引用來自ProjectB的引用。爲此,您需要從ProjectA添加對ThirdParty.dll的引用,以及僅在XAML中使用它。編譯器不復制僅在XAML中使用的引用。但是如果你在代碼中使用它們,它們會被複制。

這是同一個問題的討論here

+0

但它設置爲true。 –

+0

@Vladimir看到我的編輯 –

+0

我明白了,但是ProjectB中引用的其他類型的庫是否被複制,但這不是很奇怪嗎?或者僅當它僅用於xaml而不是直接用於.cs代碼時才複製它? –

1

您應該參考THRID黨DLL添加到您希望它出現在輸出目錄中的項目。如果「複製本地」設置爲true,則它將出現在bin目錄中,無論您是否在代碼或xaml中使用它。

0

添加這樣的事情ProjectB.csproj

<ItemGroup> 
    <Content Include="...\path\ThirdParty.dll"> 
     <Link>ThirdParty.dll</Link> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

這說服VS到ThirdParty.dll複製到的輸出文件夾項目A,太 (無需添加任何內容ProjectAThirdParty.dll)。
我仍然覺得它不足,因爲如果ThirdParty.dll在NuGet軟件包中,它的路徑通常包含版本號,當您更新軟件包時它會更改。
我還沒有嘗試過,但我不期望從NuGet更新路徑,因爲它在<Reference>