2013-05-07 26 views
17

Tôi có hai dự án. Đầu tiên là một dự án ứng dụng Windows Forms và thứ hai là một dự án thư viện lớp. Dự án thư viện Сlass hoạt động với FANN. Windows Forms là Dự án khởi động.Làm cách nào để thêm dll phụ thuộc gốc bên ngoài?

Tôi cần có Fann.Net.dll and fanndoubleMT.dll để làm việc với FANN. Tôi đã tải xuống các thư viện này và đặt chúng vào một thư mục lib, nằm ở thư mục gốc của giải pháp.

Tôi đã thêm Fann.Net.dll làm dll bên ngoài vào dự án thư viện lớp. Tôi đã biên soạn dự án. Tôi nhận được một lỗi nói rằng "Không thể tải DLL 'fanndoubleMT.dll'. Tôi đã sửa lỗi này bằng cách thêm fanndoubleMT.dll vào thư mục Windows_Forms_Application \ bin \ Debug.

Tôi nghĩ rằng đây là một giải pháp khủng khiếp cho vấn đề, vì tôi sử dụng git, và mỗi khi bạn cần chuyển dll vào thư mục này vào môi trường làm việc mới.

Trân trọng, Denis.

Trả lời

24

Bạn có thể thử này:

  1. Add/hiện mục, thay vì Thêm tài liệu tham khảo.
  2. Sử dụng Thêm làm liên kết.
  3. Đảm bảo rằng mục sẽ được sao chép trong thư mục xây dựng. Trong thuộc tính của thư viện trong VS, hãy đặt Build Action thành Content và Copy to Output Directory để Copy nếu Newer.
  4. Xong. Xây dựng lại và thử nghiệm.

Được đề xuất trong liên kết http://social.msdn.microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum=vssmartdevicesvbcs.

4

bạn không thể 'Add Reference' để dlls không được quản lý. một giải pháp là để thêm một Post Build Event cho dự án Windows Forms của bạn Một cái gì đó như: xcopy .. \ lib \ fanndoubleMT.dll $ (TargetPath) Sự kiện post post cũng có thể thực thi một .cmd hoặc file .bat

Bạn vẫn cần tham khảo để lắp ráp được quản lý, 'Fann.Net.dll'

6

Bạn có thể thêm tệp gốc làm mục được liên kết và sử dụng "Sao chép nếu mới hơn".
Vấn đề với các dll gốc, là đôi khi bạn sẽ muốn sử dụng các dll khác nhau theo cấu hình của dự án (Debug/Release hoặc platform).

Bạn có thể sửa csproj của dự án và liên kết các dll bản địa có điều kiện:

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' "> 
    <Content Include="..\..\..\..\..\bin\Win32\Release\fanndoubleMT.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' "> 
    <Content Include="..\..\..\..\..\bin\Win32\Debug\fanndoubleMT_d.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 
    <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' "> 
    <Content Include="..\..\..\..\..\bin\x64\Debug\fanndoubleMT_d.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 
    <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> 
    <Content Include="..\..\..\..\..\bin\x64\Release\fanndoubleMT.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 

Lưu ý các tùy chọn sao chép được thiết lập để PreserveNewest có nghĩa là "bản sao nếu mới hơn".

+0

Bạn cũng có thể sử dụng macro $ (Cấu hình) \ $ (Nền tảng) trong giá trị Bao gồm. Sau đó, bạn có thể tạo macro có điều kiện trên Debug mở rộng thành "_d" (và không có gì trong không gỡ lỗi) để giảm điều này xuống chỉ một ItemGroup. – kornman00

-1
  1. Nhấp chuột phải vào dự án của bạn
  2. Chọn Add, sau đó tham khảo ...
  3. Trong Reference Manager cửa sổ nhấp chuột vào Browse ... (nằm ở phía dưới).
  4. Tìm .dll của bạn và sau đó nhấn Thêm.
+1

Không thể thêm dll không được quản lý theo cách này –

0

Nếu dll không nằm trong tệp bin dự án, bạn nên cho phép sao chép dll.

  1. Nhấp chuột phải vào dll của bạn

  2. Bấm tính

  3. Nếu Copy to Output Directory là Đừng sao chép, chọn Sao chép luôn

  4. Rebuild dự án . Nó sẽ xuất hiện.

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