2012-05-23 26 views
5

Tôi đang cố gắng thực hiện chương trình c# đơn giản bằng cách sử dụng Growl C# API.csc.exe tham chiếu tập tin .dll bên ngoài

tôi đã cố gắng để biên dịch chương trình của tôi theo hai cách khác nhau:

1) tôi vẫn tiếp tục tập .dll của tôi trong cùng thư mục với tập tin .cs tôi. Than tôi chạy

csc /r:Growl.Connector.dll,Growl.CoreLibrary.dll /out:test.exe *.cs 

Nó biên soạn tốt và cũng chạy tốt.

2) Bây giờ tôi đã tạo ra một thư mục bên trong thư mục làm việc hiện tại của tôi tên là growl và giữ tất cả các tài liệu tham khảo .dll của tôi ở đó.

Bây giờ khi tôi cố gắng biên dịch nó bằng cách sử dụng lệnh dưới đây

csc /r:"D:\Modified\Growl_NET_Connector_SDK\libraries\growl\Growl.Connector.dll","D: 
\Modified\Growl_NET_Connector_SDK\libraries\growl\Growl.CoreLibrary.dll" /out:test.exe *.cs 

Nó được biên soạn tốt nhưng khi tôi cố gắng chạy nó ngoại trừ dưới đây đề cập xảy ra.

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Growl.Connector, Version=2.0.0.0, Culture=n 
eutral, PublicKeyToken=980c2339411be384' or one of its dependencies. The system cannot find the file specified. 
at GrowlNotification.Program.Main(String[] args) 

Vì vậy, câu hỏi của tôi là cách đúng để tham chiếu .dll tập tin trong csc khi tập tin nằm trong một thư mục bên ngoài là gì.

Đây là directory structure cho trường hợp thứ 2.

Trả lời

9

Vì vậy, câu hỏi của tôi là cách chính xác để tham chiếu tệp .dll trong csc khi tệp nằm trong thư mục bên ngoài.

Bạn đã tham chiếu chúng tại xây dựng thời gian. Bạn chỉ cần cung cấp chúng tại thời điểm thực hiện cũng vậy, nhưng sao chép chúng vào cùng thư mục với tệp thực thi, khi bạn muốn chạy nó.

Bạn cũng có thể điều tra bằng cách sử dụng Bộ đệm ẩn toàn cục nếu đây là các hội đồng đã được ký, nhưng cá nhân tôi chỉ muốn giữ tệp thực thi với các thư viện mà nó phụ thuộc.

+0

Vì vậy, không có cách nào tôi có thể giữ tệp '.dll' trong một thư mục bên ngoài và chạy' .exe' của mình chỉ bằng cách 'bấm đúp vào' nó. Như tôi hiểu từ câu trả lời của bạn rằng tập tin '.dll' sẽ có mặt trong cùng một thư mục với .exe tại thời gian chạy. – RanRag

+0

@Noob: Tôi tin rằng nó có thể nằm trong thư mục con * nếu bạn thêm tệp app.config để chỉ định thăm dò đường dẫn bin riêng tư, nhưng điều đó chỉ thêm sự phức tạp hơn nữa. Đó là tất cả * nhiều * đơn giản nếu mọi thứ trong cùng một thư mục. –

+0

Cảm ơn thông tin. – RanRag

1

Bạn có thể thêm chúng bằng cách sử dụng công tắc dòng lệnh/lib và/reference trong khi biên dịch.

http://msdn.microsoft.com/en-us/library/s5bac5fx.aspx

Nhưng (Trích từ bài viết)

Một thay thế cho việc sử dụng/lib là để sao chép vào thư mục làm việc bất kỳ hội yêu cầu; điều này sẽ cho phép bạn chỉ cần vượt qua lắp ráp tên để/tham khảo. Sau đó bạn có thể xóa các hội đồng từ thư mục làm việc . Vì đường dẫn đến assembly phụ thuộc không phải là được chỉ định trong manifest assembly, ứng dụng có thể được bắt đầu trên máy tính đích và sẽ tìm và sử dụng assembly trong bộ nhớ lắp ráp toàn cầu .

Bởi vì trình biên dịch có thể tham chiếu đến assembly không ngụ ý rằng thời gian chạy ngôn ngữ phổ biến là sẽ có thể tìm và tải assembly tại thời gian chạy . Xem Cách thời gian chạy định vị hội đồng để biết chi tiết về cách tìm kiếm thời gian chạy thời gian chạy cho các hội đồng được tham chiếu.

để câu trả lời của Jon Skeet tốt hơn. (Tôi chỉ thêm thông tin này để cung cấp nhiều thông tin hơn bình luận của tôi chứ không phải là câu trả lời. Câu trả lời của Jon là IMO tốt nhất)

0

Bạn có thể tạo symlinks cho các hội đồng trong thư mục thư viện của mình để bạn chỉ cần để giữ cho chúng được cập nhật ở một vị trí.

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