2011-11-21 28 views
6

Tôi duyệt qua vài vấn đề về studio và nunit được ghi trên stackoverflow, nhưng không thể tìm thấy bất kỳ chủ đề nào phù hợp với trường hợp của tôi.NUnit C# Test Project tham khảo các DLL khác

Tôi đang sử dụng NUnit để kiểm tra một số mã tôi đã viết, tôi đang tải tệp * .csproj của dự án thử nghiệm của tôi vào Công cụ GUI NUnit.

Tôi đã tìm ra vấn đề tôi đoán nhưng tôi không có giải pháp cho đến nay. Tôi đang làm gì:

Tôi tham chiếu 2 dự án khác đều là dự án dll. Điều này có nghĩa là tôi có 3 dự án: TestProject (DLL), SettingsManager (DLL), DatabaseInterface (DLL). Tất cả đều nằm trong một giải pháp. Dự án DatabaseInterface chứa các lời gọi api nguyên bản đến một cuộc gọi khác, C++ x86, DLL, nhưng không tham chiếu rõ ràng DLL này thông qua câu lệnh "using".

Một trong hai thiết bị này là Trình quản lý cài đặt, lưu trữ một số dữ liệu cấu hình như đường dẫn &, v.v. Cả hai, Testproject cũng như DatabaseInterface đều tham chiếu đến SettingsManager.

Tất cả 3 dự án đều được xây dựng trong "Gỡ lỗi" và trong "AnyCPU". Tham chiếu & chỉ sử dụng Trình quản lý cài đặt trong TestProject của tôi hoạt động tốt nhưng khi tôi thêm DatabaseInterface, tôi nhận được một BadImageFormatException cho biết rằng nó đang cố tải một tệp có định dạng sai.

Để làm cho nó rõ ràng hơn, đó là làm việc:

using myNamespace.Settings; // contains SettingsManager 
using System; 
using NUnit.Framework; 

namespace myNamespace.myTestProject 
{ 
    [TestFixture] 
    public class TestProject 
    { 
     [SetUp] 
     public void SetUp() 
     { 

     } 

     [Test] 
     public void ReadDbFile() 
     { 
      string s = SettingsManager.DbFile; // gets the path of the db file 
     } 
    } 
} 

NUnit Output:

này không hoạt động:

using myNamespace.Settings; // contains SettingsManager 
using myNamespace.DbInterface; // contains DatabaseInterface, which contains native calls to C++ dll 
using System; 
using NUnit.Framework; 

namespace myNamespace.myTestProject 
{ 
    [TestFixture] 
    public class TestProject 
    { 
     DatabaseInterface instance = null; 
     [SetUp] 
     public void SetUp() 
     { 

     } 

     [Test] 
     public void ReadDbFile() 
     { 
      string s = SettingsManager.DbFile; // gets the path of the db file 
     } 
    } 
} 

Các thử thứ hai, chứa

using myNamespace.DbInterface; 

ném myNamespace.myTestProject.TestProject (TestFixtureSetUp): Thiết lập: System.BadImageFormatException: Die Datei oder Assembly "DatabaseInterface, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null" hoặc không tìm thấy tham chiếu. Nó đã được thử nghiệm để tải một tập tin của một định dạng sai ".

ngay cả khi tất cả 3 dự án đang xây dựng sử dụng gỡ lỗiAnyCPU.

Tôi đang sử dụng một tiêu chuẩn * .config tập tin, như Một trong những dự án NUnit Testproject Có lẽ một số là sai với điều này

Có ai gặp phải lỗi tương tự đang cố gắng tải mã từ một DLL khác cho đến bây giờ không? Có thể là một vấn đề mà cả hai dự án (Test & Database) tham khảo Cài đặtQuản lý DLL? Tôi có làm điều gì đó sai lớn?

Tôi đã kiểm tra kỹ cấu hình xây dựng của mình trong cả 3 dự án nhưng không thể tìm thấy bất kỳ cài đặt nào có thể sai và giải thích BadImageFormatException.

Trả lời

5

Có thể bạn đang sử dụng trình chạy GUI nunit.exe được nhắm mục tiêu đến CPU bất kỳ. Nó sẽ được JIT biên dịch vào nền tảng đích, mà tôi giả sử là x64 vì bạn đang gặp vấn đề này. Thay vào đó, hãy thử sử dụng nunit-x86.exe để chạy thử nghiệm của bạn. Phiên bản này của GUI Á hậu được nhắm mục tiêu cụ thể để chạy trong quy trình 32 bit sẽ tương thích với phụ thuộc thư viện DatabaseInterface của bạn.

+0

có lẽ đó là vấn đề tôi đoán. Bởi vì tôi đang sử dụng một 64 bit Win7 tất cả mọi thứ có nghĩa là "AnyCPU" sẽ là 64Bit sau đó. Đó là lỗi với DatabaseInterface DLL được biên dịch 32 bit. – inva

1

Có thể là sự cố phụ thuộc vào các phụ thuộc của bạn. Nó có thể xảy ra nếu phụ thuộc của bạn phụ thuộc vào thư viện COM không được quản lý là x86 và bạn đang chạy trên x64.Mọi thứ sẽ chạy tốt, cho đến khi bạn cố gắng sử dụng sự phụ thuộc đó trong mã của bạn - nó sẽ ném BadImageFormatException.

Để khắc phục điều này, bạn phải thêm mục tiêu cụ thể (x86 hoặc x64) vào dự án của mình và thử với điều đó.

+0

không có lý do tại sao tôi chết tiệt NUnit cho đến nay - tôi không thể đặt nền tảng mục tiêu xây dựng cụ thể là mlike x86 hoặc x64. Nếu tôi làm như vậy, tôi sẽ nhận được BadImageFormatException cũng cho DLL SettingsManager. Tôi đỏ rằng một trong những đã thiết lập * AnyCPU * như xây dựng mục tiêu ... và nó không hoạt động nếu tôi đặt x86 hoặc x64 rõ ràng, nhưng tôi không biết tại sao cho đến nay. – inva

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