我有一个vb.net解决方案,我想添加一个用c#编写的新dll文件,并在vb.net编写的代码中使用dll中的功能。
我对它做了几次使用,似乎工作正常, 但用c#搞乱vb.net代码就像我想做的那样聪明。
我正在做什么有什么危险?
非常感谢您的帮助。
答案 0 :(得分:11)
您的DLL不是C#DLL,它是.NET DLL。编译完成后,你所拥有的就是IL - 无论它来自何种语言都无关紧要。应该没问题,除非你遇到一个奇怪的边缘情况,其中DLL的接口包含Visual Basic不支持的东西。但这将是一个非常边缘的案例。
公共语言规范(CLS)定义了.NET语言必须支持的.NET功能的子集,如果您的DLL符合CLS,那么您可以毫无问题地使用它。如果你对CLS,CTS,CLR等之间的区别感到困惑,那么我发现它在this book中的覆盖范围非常有用,尽管它主要是一本C#书。
答案 1 :(得分:5)
将您的代码标记为符合CLS,然后C#编译器会警告您,如果您从另一种.Net语言调用DLL时可能会导致任何问题。
来自MSDN的一些引用
与其他对象完全交互 不管他们是什么语言 实现在,对象必须暴露给 只调用那些功能 他们必须使用所有语言 与...互操作。为此原因, Common Language Specification (CLS),这是一套基本的 许多人需要的语言功能 应用程序已定义。
你可以标记组件,模块, 类型和成员使用CLSCompliantAttribute符合CLS。
一些符合CLS的语言编译器, such as the C# compiler,让您 指定您想要的代码 符合CLS标准。这些编译器可以 检查CLS合规性并告诉您 知道您的代码何时使用功能 CLS不支持。
此外,您的组织现在需要C#技能以及Vb.Net技能。您应该说服自己这样做,然后说服关键决策者。
答案 2 :(得分:3)
您可以在同一个项目中混合使用VB和C#代码 - 我已经处理了几个混合它们且没有问题的项目。
你的语言混合似乎更加孤立 - 一个带有多个C#DLL和vb项目的解决方案。
我没有看到很多问题。
答案 3 :(得分:1)
找到了一个解决方案here:
但是,可以使用 单一的不同语言 项目。您可能需要编写命令 行构建文件来构建项目。 在.NET framework SDK中,有一个 样品就可以了。你可以访问它 C:\ Program Files \ Microsoft Visual 工作室 .NET \ FrameworkSDK \样本\技术\ CrossDevLan 瓜哥。
此示例演示了该用途 不同的开发语言 单个项目。此示例创建 两个集会。第一个是图书馆 或定义简单的DLL程序集 用托管编写的基类 C ++的扩展。第二 assembly是一个可执行程序集 它定义了三个派生类 用C#,VB和IL编写 (中级语言)。这些类型 彼此并最终得到 来自托管的基类 C ++。最后,可执行文件创建 每个派生类型的实例 并为每个调用虚拟方法。 .NET Framework是一个环境 各种开发人员都可以工作 在开发过程中无缝地一起 用他们选择的语言。
但是你可以在asp.net应用程序中使用VB.NET和C#代码。
您需要在App_Code文件夹中创建两个文件夹(例如vbFolder和csFolder),并在web.config中编写此代码:
<system.web>
<compilation>
<CODESUBDIRECTORIES>
<ADD directoryName="vbFolder" />
<ADD directoryName="csFolder" />
</CODESUBDIRECTORIES>
</compilation>
</system.web>
好的解释是here。
答案 4 :(得分:0)
我认为最大的危险是让开发人员了解这两种语言;虽然C#和VB.NET类似,因为它们与.NET框架绑定,但它们有一些特殊性。
你会找到很多优秀的C#程序员和许多优秀的VB.NET程序员,但是为这两种语言找到一个优秀的程序员会有点困难
另外,请看一下这篇文章:A Manager’s Retrospective on the C# versus VB.NET decision,因为它会讨论其他项目,包括开发人员偏好,语言功能和招聘。
答案 5 :(得分:0)
VB.NET和&amp; C#被编译为MSIL(Microsoft中间语言)而不是本机代码,这是通过最终用户机器上存在的.NET框架工作完成对最终用户机器上的本机(机器)的完全编译,因此如果它是.NET对于操作系统x,你的程序应该适用于操作系统x,如果它是操作系统,你的应用程序应该可以正常运行OS,这就是.NET技术带来的解决方案,让.NET应用程序操作系统在 - 依赖
还有一个COM Marshaler服务支持旧组件(控件)与.NET应用程序一起使用,例如,您可以在C#windows应用程序中调用vb6 control(* .ocx)。
这是Microsoft技术和技术之间的完美集成。
并且不需要让开发人员在VB.NET和C#中都很好,但是如果你需要一个,我会在这里:)
但问题是我为什么同时参与?
这只是因为我提供培训,所以我想扩展我的能力,我很惊讶他们两者都非常接近,除了语法。