2010-02-21 58 views
20

Tôi đã thêm một dự án, Project2, vào giải pháp của tôi. Nó đã có một dự án khác cho phép nói Project 1. Làm thế nào tôi có thể gọi các lớp và các phương thức từ project2 vào project1?Làm thế nào tôi có thể tham khảo một dự án từ một dự án khác trong C#?

Điều tôi đã làm:

Tôi có Dự án 1 và giải pháp của nó. Tôi đã thêm Project 2 vào dự án của Project 1. Dự án 1 và Dự án 2 đều có một không gian tên có tên là Correction. Bây giờ, tôi gọi là sử dụng Correction. Tuy nhiên, trong dự án 1 gõ Project2 cho tôi một lỗi kể từ khi tuyên bố rằng nó không biết nó là gì.

Tôi cũng đã thêm dự án 2 làm tài liệu tham khảo.

cảm ơn tất cả các câu trả lời. tôi không biết tôi đang làm gì sai

+0

Tôi đã thêm tham chiếu vào dự án. Tôi không biết làm thế nào để gọi nó là –

+0

Xem câu trả lời cập nhật của tôi. – James

+0

@C .: bạn đã thử gì? –

Trả lời

41

Trước tiên, bạn cần phải thêm tham chiếu đến Project2 trong Project1.

Nếu bạn chuyển đến Project1 -> Tham khảo -> Thêm tham chiếu, bạn sẽ thấy tùy chọn thêm dự án vào giải pháp và thêm dự án2.

Khi bạn thêm một tài liệu tham khảo, để gọi một Foo lớp trong namespace Name1.Name2, bạn có thể sử dụng lớp như

Name1.Name2.Foo foo = new Name1.Name2.Foo(...); 

hoặc nếu bạn muốn tránh đánh máy, bạn có thể thêm các lệnh using gần phía trên cùng của tập tin

using Name1.Name2; 

và bây giờ có thể tham khảo các lớp học sử dụng chỉ Foo, như

Foo foo = new Foo(...); 

Lưu ý, bạn sẽ có tìm ra các không gian tên trong Project2. Chỉ cần sử dụng tên Project2 sẽ không hoạt động. Hãy xem tệp có chứa khai báo của lớp bạn muốn sử dụng và tìm kiếm định nghĩa vùng tên.

Vì vậy, nếu bạn nhìn thấy một cái gì đó như

namespace Name1.Name2 { 


    class Bar { 
     // Blah 
    } 

    // Notice the word public here. 
    public class Foo { 
     // Blah 
    } 
} 

Name1.Name2 là không gian tên cho Foo và đó là những gì bạn cần sử dụng.

Cũng lưu ý rằng bạn có thể cần phải có công cụ sửa đổi truy cập công khai công khai cho lớp mà bạn muốn sử dụng trong Project1. Ví dụ trong kịch bản trên, bạn sẽ có thể truy cập lớp Foo, nhưng không thể truy cập lớp học.

Trang này sẽ giúp bạn hiểu không gian tên: http://www.csharp-station.com/tutorials/lesson06.aspx

+0

Có, tôi đã làm điều đó, cảm ơn :) Nhưng làm thế nào để tôi gọi nó? –

+0

@C., Ý của bạn là gì, làm thế nào để bạn "gọi nó"? Một khi bạn tham chiếu nó, bây giờ bạn có quyền truy cập vào các lớp và các phương thức không gian tên đó. Làm với họ những gì bạn muốn. – Mithrax

+0

@C: Tôi đã chỉnh sửa câu trả lời để cung cấp thêm thông tin, đọc nó và xem nó có giúp ích gì không. –

0

Bạn cần phải thêm project2 đến tài liệu tham khảo của Project1. Bây giờ bạn có thể truy cập các lớp từ Project2. Đừng quên thêm đúng không gian tên!

+0

không tìm thấy không gian tên chính xác:/ –

2

Bạn chỉ cần thêm tham chiếu trong Project1 vào Project 2. Bạn làm điều này bằng cách bấm chuột phải vào thư mục References từ ngăn thám hiểm giải pháp, sau đó bạn có thể sử dụng tùy chọn Browse để tìm Project2. Hoặc nếu nó đã được thêm vào giải pháp, bạn chỉ có thể sử dụng tab Projects.

Chỉ để xóa điều này cho bạn. Thêm dự án vào Solutionkhông phải giống như thêm tham chiếu. Mở Project2 trong Visual Studio.Sau đó, thêm Project1 vào giải pháp hoặc nhấp chuột phải vào thư mục References trong Project2 và thêm một tham chiếu đến Project1. Để đảm bảo bạn đã thêm đúng tham chiếu, hãy mở rộng thư mục tham chiếu và xác minh bạn có thể xem Project1 trong danh sách.

Ví dụ

Tạo một ứng dụng giao diện điều khiển mới và gọi nó là MyApplication. Sau đó, nhấp chuột phải vào Solution và chọn tùy chọn Add New Project và tạo một dự án thư viện mới và gọi nó là MyLib. Tại thời điểm này, bạn chỉ cần thêm 2 dự án vào giải pháp 1, không có tham chiếu nào giữa mỗi dự án đã được tạo.

Nhấp chuột phải vào thư mục References trong dự án MyApplication và chọn Add Reference.... Vì MyLib đã là một phần của giải pháp, bạn có thể chuyển đến tab Projects và chọn MyLib từ danh sách tạo tham chiếu mới cho dự án này trong MyApplication. Nếu nó không phải là một phần của giải pháp, bạn có thể sử dụng tab Browse và tìm dự án thông qua trình khám phá.

Vì vậy, tại thời điểm này, chúng tôi đã thiết lập một tham chiếu bên trong MyApplication đến MyLib. Vì vậy, để sử dụng các lớp học từ MyLib bên trong MyApplication, chúng tôi có thể khai báo việc sử dụng cho dự án bên trong đơn vị hoặc chúng tôi có thể sử dụng đường dẫn đầy đủ trực tiếp, ví dụ:

// main code file in MyApplication 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using MyLib; // This will allow me to access the classes inside MyLib directly 

namespace PdfPrinter 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // if we have declared the namespace at the top, we can do: 
      MyLibClass cls = new MyLibClass(); 
      // or if you don't want to add the namespace at the top we have to do: 
      MyLib.MyLibClass cls = new MyLib.MyLibClass(); 
     } 
    } 
} 

Hy vọng rằng hãy xóa nó một chút cho bạn.

+0

Tôi đã thêm dự án bằng cách sử dụng ADD EXISTING PROJECT cho giải pháp ... nhưng không cho phép tôi gọi nó:/ –

+0

Bạn chỉ thêm dự án vào 'solution' đây không phải là giống như thêm 'tham chiếu' từ dự án này sang dự án khác. Như đã đề cập ở trên, bạn cần phải kích chuột phải vào thư mục 'references' bên trong Project2 và thêm một tham chiếu đến Project1. – James

1

Chọn dự án bạn sẽ sử dụng (ví dụ project1), nhấp chuột phải vào dự án thám hiểm giải pháp và nhấp vào "Thêm tham chiếu".

Bạn sẽ có thể thêm tham chiếu đến giải pháp khác từ đó (project2).

Tất cả những gì bạn phải làm sau đó là thêm tuyên bố sử dụng trong dự án chính của bạn (project1) và bạn sẽ có thể truy cập nó bình thường.

+0

nó sẽ không cho phép tôi sử dụng câu lệnh project2:/ –

+0

Bạn phải tạo một đối tượng từ nó, xem câu trả lời của bakasans khi giải thích rõ ràng hơn tôi có thể =] –

3

Bạn phải chỉ định "đường dẫn" cho mã bạn đang cố gắng gọi. Bạn thực hiện việc này bằng cách

1) Chỉ định không gian tên của dự án/lớp thứ hai bạn muốn sử dụng, thường ở đầu tệp mã của bạn.

using MySecondProject; 

var foo = new ClassFromSecondProject(); 

2) Rõ ràng xác định tên của lớp bạn muốn sử dụng, bao gồm cả không gian tên của nó

//do stuff 
var foo = new MySecondProject.ClassFromSecondProject(); 
//do more stuff 
2

Tôi chỉ có vấn đề này rất giống nhau. Tôi ba kiểm tra tất cả mọi thứ, và tài liệu tham khảo đã được thêm vào, dự án là trong cùng một giải pháp, tất cả mọi thứ thiết lập. Tôi cũng biết không gian tên của tôi, thậm chí tôi đã hoàn thành mã nhưng khi xây dựng, tôi đã nhận được lỗi tương tự rằng không gian tên không thể được tìm thấy.

Tôi mất một giờ để tìm ra điều này: Dự án tôi đã thêm, không tìm thấy không gian tên tương ứng, được đặt thành một khung mục tiêu .NET khác. Tôi đã thay đổi giải pháp của mình thành .NET Framework 4 "đầy đủ" thay vì Hồ sơ khách hàng 4, nhưng dự án mới mà tôi thêm vào đã được đặt lại cho Hồ sơ khách hàng.

Thay vì cho tôi cảnh báo đúng về cấu hình không đúng, nó đã xác nhận rằng không thể tìm thấy không gian tên.

Hy vọng điều này sẽ giúp một người nào đó và giúp bạn tiết kiệm thời gian mà tôi chỉ lãng phí.

+0

Cảm ơn người đàn ông! – Tatarinho

0

Như đã nêu bởi những người khác, bạn cần thêm các dự án (hiện có) vào giải pháp. Sau đó, bạn cần phải thêm tham chiếu cho họ theo giải pháp -> Dự án. Bây giờ, chúng sẽ hiển thị với không gian tên của chúng trong Trình duyệt đối tượng.

Còn một điều nữa bạn cần đảm bảo, điều này đã mang lại cho tôi một số thử nghiệm để tìm hiểu. Bất cứ khi nào tôi thêm dự án thứ hai, dự án thứ nhất ngừng hoạt động và thông báo lỗi giống như khi dự án bỏ sót một tham chiếu ("Không thể tìm thấy loại tên hoặc không gian tên 'Ber' (bạn đang thiếu chỉ thị sử dụng hoặc một tham chiếu lắp ráp?) "). Vấn đề là cả hai dự án đều có cùng tên mặc định là Tên lắp ráp ("Thư viện lớp học") trong dự án Các thuộc tính -> Ứng dụng. Vì vậy, cung cấp cho họ tên duy nhất. Tôi sử dụng giống như Không gian tên mặc định.

0

Tôi gặp sự cố tương tự với lỗi này. Tôi không thể phát hiện project1 từ project2. Tôi đã thêm tham chiếu từ project2 đến project1 nhưng nó vẫn không hoạt động. Sau đó, tôi dỡ project1, loại bỏ nó khỏi giải pháp. Sau đó, tôi thêm nó một lần nữa, đã tham khảo từ project2 và ta da ... nó đã làm việc ..... :-)

1

Tôi không có đủ đại diện để trả lời câu trả lời của Tom nhưng nó đã giúp tôi rất nhiều. Ngoài ra, bạn phải chọn cùng một phiên bản con của .NET Framework (ngoài ra nó cũng giống như toàn bộ/lõi/tiêu chuẩn, v.v.). Tôi đã có 4.5 quy định trong một dự án thử nghiệm và nhận được lỗi này, thay đổi nó thành 4.6.1 (giống như những người khác) khắc phục vấn đề này.

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