2010-01-22 34 views
5

Tôi có giải pháp vb.net và tôi muốn thêm vào đó một tệp dll mới được viết bằng C# và sử dụng chức năng từ dll, trong mã được viết bằng vb.net.Trộn mã VB.net với C# code

Tôi đã thực hiện một số công dụng của nó và có vẻ như hoạt động tốt, nhưng nó là một điều thông minh để làm rối tung mã vb.net với C# như tôi muốn làm.

Và điều gì gây nguy hiểm cho những gì tôi đang làm?

Cảm ơn rất nhiều sự trợ giúp.

Trả lời

11

DLL của bạn không phải là C# DLL, đó là tệp DLL .NET. Sau khi biên dịch, tất cả những gì bạn có là IL - không quan trọng nó là ngôn ngữ gì. Nên không có vấn đề, trừ khi bạn gặp phải một trong những trường hợp cạnh lẻ nơi giao diện của DLL bao gồm một cái gì đó không được hỗ trợ bởi Visual Basic. Nhưng điều này sẽ là một trường hợp rất nhiều.

Đặc tả ngôn ngữ chung, hoặc CLS, xác định tập hợp con các tính năng .NET phải được hỗ trợ bởi ngôn ngữ .NET và nếu DLL của bạn tuân thủ CLS, thì bạn có thể sử dụng nó mà không gặp vấn đề gì. Nếu bạn đang bối rối về sự khác biệt giữa CLS, CTS, CLR, vv, sau đó tôi tìm thấy phạm vi bảo hiểm của nó trong this book rất hữu ích, mặc dù nó chủ yếu là một cuốn sách C#.

+0

OP đang hỏi về nếu đó là * điều đúng đắn * để làm, vì nó đã có sự kết hợp ngôn ngữ đó tại chỗ –

+1

Đây là đúng 95% - 99,99% nhưng không đúng 100%. Đó là lý do tại sao có một đặc tả ngôn ngữ chung. Đánh dấu DLL là CLS tuân thủ, và đảm bảo 100% bạn có thể gọi nó từ bất kỳ ngôn ngữ CLS nào (ví dụ: VB.Net). http://stackoverflow.com/questions/2117776/mixing-vb-net-code-with-c-code/2117937#2117937 – MarkJ

+0

@Mark - cảm ơn, tôi rõ ràng không bắn vào tất cả các xi lanh ngày hôm nay. Đoán đó là lý do tại sao tôi không làm việc. Dù sao, đã chỉnh sửa câu trả lời. –

3

Bạn có thể kết hợp mã VB và C# trong cùng một dự án - Tôi đã làm việc trên một số dự án đã trộn lẫn chúng và không có vấn đề gì.

Kết hợp ngôn ngữ của bạn dường như bị cô lập nhiều hơn - một giải pháp với nhiều dự án C# DLL và vb.

Tôi không thấy nhiều vấn đề với điều đó.

+6

Chắc chắn bạn có nghĩa là "cùng một giải pháp"? Trộn trong một dự án không thể làm việc. –

+0

Nó có thể làm việc trong một dự án ASP.NET "Web Site". –

+0

Có thể có hai ngôn ngữ trong cùng một dự án - không phải trong cùng một tệp. –

0

Tôi nghĩ nguy hiểm lớn nhất là phải nhờ nhà phát triển biết cả hai ngôn ngữ; trong khi C# và VB.NET là tương tự vì chúng bị ràng buộc với .NET framework, chúng có một số đặc thù.

Bạn sẽ tìm thấy nhiều lập trình viên tốt C# và nhiều lập trình viên VB.NET tốt, nhưng có thể khó khăn hơn một chút để tìm một lập trình viên tốt cho cả ngôn ngữ

Ngoài ra, có một cái nhìn vào bài viết này: A Manager’s Retrospective on the C# versus VB.NET decision vì nó nói về các mục khác cần lưu ý, như các ưu tiên của nhà phát triển, các tính năng ngôn ngữ và tuyển dụng.

+0

Không phải tôi và không phải là lập trình viên khác làm việc trên dự án đó, không biết ở tất cả ngôn ngữ vb. Vì vậy, chúng tôi thực sự muốn chuyển sang C#. –

+0

bạn có thể tham khảo rằng hội đồng vb.net, giống như bạn đã làm, và cố gắng mua thời gian với sếp của bạn để tạo ra một giải pháp sử dụng một ngôn ngữ duy nhất; bạn có thể biện minh rằng nói về năng suất –

1

Một giải pháp đã được tìm thấy here:

Tuy nhiên, nó có thể sử dụng ngôn ngữ khác nhau trong một dự án duy nhất . Bạn có thể cần phải viết lệnh tệp xây dựng dòng để xây dựng dự án. Trong .NET framework SDK, có một mẫu trên đó. Bạn có thể truy cập nó trong C: \ Program Files \ Microsoft Visual Studio .NET \ FrameworkSDK \ Samples \ Technologies \ CrossDevLan gauge.

Mẫu này thể hiện việc sử dụng ngôn ngữ phát triển khác nhau trong dự án đơn lẻ . Mẫu này tạo ra hai cụm. Đầu tiên là một thư viện hoặc hội đồng DLL định nghĩa một lớp cơ sở đơn giản được viết trong các phần mở rộng được quản lý cho C++.Việc lắp ráp thứ hai là một hội đồng thực thi xác định ba lớp dẫn xuất được viết bằng C#, VB và IL (Ngôn ngữ trung gian). Các loại này lấy được từ nhau và cuối cùng là từ lớp cơ sở được viết bằng số C++ được quản lý. Cuối cùng, tệp thực thi tạo ra các trường hợp của mỗi loại có nguồn gốc và gọi một phương thức ảo cho mỗi loại. Khuôn khổ .NET là một môi trường nơi các nhà phát triển khác nhau có thể làm việc cùng nhau liền mạch trong khi phát triển bằng ngôn ngữ mà họ lựa chọn.

Nhưng bạn có thể sử dụng cả mã VB.NET và C# bên trong ứng dụng asp.net.

Bạn cần phải tạo hai thư mục (ví dụ vbFolder và csFolder.) Trong thư mục App_Code và viết mã này trong web.config:

<system.web>  
<compilation>  
<CODESUBDIRECTORIES>  
<ADD directoryName="vbFolder" />  
<ADD directoryName="csFolder" />  
</CODESUBDIRECTORIES>  
</compilation>  
</system.web> 

Tốt giải thích là here.

0

Cả VB.NET & C# được biên dịch thành MSIL (Ngôn ngữ trung gian của Microsoft) không phải mã gốc và điều này để hoàn thành việc biên dịch đầy đủ thành máy gốc trên máy người dùng cuối thông qua công việc .NET frame tồn tại máy tính người dùng cuối vì vậy nếu nó là .NET cho hệ điều hành x, chương trình của bạn sẽ hoạt động tốt cho hệ điều hành x và nếu nó là hệ điều hành y, ứng dụng của bạn sẽ hoạt động tốt với OS y, và đây là giải pháp mà công nghệ .NET đi kèm với hãy để hệ điều hành .NET ứng dụng trong Dependent.

cũng có một dịch vụ COM Marshaler để hỗ trợ thành phần cũ (điều khiển) để làm việc với các ứng dụng .NET vì vậy ví dụ bạn có thể gọi điều khiển vb6 (* .ocx) trong ứng dụng C# windows.

và đây là tích hợp tuyệt vời giữa các công nghệ và kỹ thuật của Microsoft.

và không cần phải có phát triển tốt ở cả VB.NET và C#, nhưng bất kỳ cách nào nếu bạn cần một, tôi đang ở đây :)

nhưng câu hỏi là tại sao tôi lại ở cả hai?

điều này chỉ vì tôi cung cấp đào tạo, Vì vậy, tôi nghĩ rằng để mở rộng khả năng của tôi và tôi đã rất ngạc nhiên rằng cả hai đều rất gần ngoại trừ cú pháp.

5

Đánh dấu mã của bạn là CLS tuân thủ và sau đó trình biên dịch C# sẽ cảnh báo bạn nếu bạn làm bất cứ điều gì có thể gây ra sự cố khi DLL của bạn được gọi từ ngôn ngữ khác .Net.

Một số trích dẫn từ MSDN

Để tương tác đầy đủ với các đối tượng khác không phụ thuộc vào ngôn ngữ mà họ được thực hiện, các đối tượng phải tiếp xúc với người gọi chỉ có những tính năng mà chung cho tất cả các ngôn ngữ họ phải tương thích với. Vì lý do này, Common Language Specification (CLS), là tập hợp các tính năng ngôn ngữ cơ bản cần thiết cho nhiều ứng dụng , đã được xác định.

Bạn có thể đánh dấu các hội đồng, mô-đun, loại và các thành viên như tuân thủ CLS bằng cách sử dụng CLSCompliantAttribute.

Một số trình biên dịch ngôn ngữ CLS-compliant, such as the C# compiler, cho phép bạn xác định rằng bạn có ý định mã của bạn để được CLS-compliant. Các trình biên dịch này có thể kiểm tra sự tuân thủ CLS và cho phép bạn biết khi nào mã của bạn sử dụng chức năng không được CLS hỗ trợ.

Ngoài ra, tổ chức của bạn bây giờ sẽ cần kỹ năng C# cũng như kỹ năng Vb.Net. Bạn có lẽ nên thuyết phục chính mình rằng điều này là OK, và sau đó thuyết phục các nhà hoạch định chính.