2011-09-05 31 views
7

Tôi có ProjectA (WPFApplication) tham chiếu ProjectB (ClassLibrary). Bên trong ProjectB tôi có cửa sổ wpf sử dụng điều khiển từ ThirdParty.dll mà tôi tham chiếu tương ứng từ ProjectB.Thư viện tham chiếu không được sao chép

Vấn đề là nó không tìm ThirdParty.dll trong thư mục đầu ra của PROJECTA và exceprion runtime XAML phân tích cú pháp được nâng lên. Không có ThirdParty.dll trong GAC. Sao chép cục bộ được đặt thành true. Nó hoạt động nếu tôi thêm thủ công thư mục đầu ra của thư viện ProjectA và nó cũng hoạt động nếu tôi sử dụng ThirdParty.dll ở đâu đó ngay trong tệp cs của tôi.

Tôi có thể giải quyết điều đó bằng cách nào?

+7

Xem thuộc tính của tham chiếu của bạn và kiểm tra xem Sao chép địa phương được đặt thành true. – albertjan

+1

@the_ajp: bạn nên thêm câu trả lời đó làm câu trả lời –

+0

Sao chép địa phương là đúng. –

Trả lời

4

Lý do cho điều này là studio trực quan chỉ sao chép tài nguyên vào thư mục đầu ra nếu Sao chép địa phương được đặt. Chỉ cần đặt tham chiếu đến Sao chép Địa phương và bạn sẽ ổn.

Kiểm tra điều này link về cách hoạt động của tính năng này.

Khi bạn tham chiếu ProjectA, các tham chiếu từ ProjectB không được tham chiếu tự động. Để làm việc này, bạn cần thêm tham chiếu tới ThirdParty.dll từ ProjectA nếu bạn chỉ sử dụng nó trong XAML. Trình biên dịch không sao chép các tham chiếu chỉ được sử dụng trong XAML. Nhưng nếu bạn sử dụng chúng trong mã, chúng được sao chép.

Đây là vấn đề tương tự như đã thảo luận here

+0

Nhưng nó được đặt thành true. –

+0

@Vladimir thấy chỉnh sửa của tôi –

+0

Tôi thấy nhưng không phải là nó lạ mà các thư viện khác mà các loại được tham chiếu là tốt trong ProjectB được sao chép nhưng điều này không phải là?Hoặc nó không được sao chép chỉ khi nó được sử dụng chỉ trong xaml và không được sử dụng trực tiếp trong mã .cs? –

1

Bạn nên thêm tham chiếu đến các dll bên thrid cho dự án nơi bạn muốn nó xuất hiện trong thư mục đầu ra. Nếu Copy Local được đặt thành true, nó sẽ xuất hiện trong thư mục bin của bạn cho dù bạn có sử dụng nó trong mã hay xaml hay không.

0

Thêm một cái gì đó như thế này để ProjectB.csproj:

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

này thuyết phục VS để sao chép ThirdParty.dll vào thư mục đầu ra của PROJECTA, quá (không cần phải thêm bất cứ điều gì để ProjectA về ThirdParty.dll).
Tôi vẫn thấy không đủ vì nếu ThirdParty.dll nằm trong gói NuGet, đường dẫn của nó thường chứa số phiên bản, sẽ thay đổi khi bạn cập nhật gói.
Tôi chưa thử nhưng tôi không mong đợi từ NuGet cập nhật đường dẫn tại đây như trong <Reference>.

Các vấn đề liên quan