你能在同一个项目中为一个类库混合 vb 和 c # 文件吗?有没有什么设置能让这一切成为可能?
尽管后台编译器似乎能够很好地处理这个问题(除了我在同一个名称空间中有两个同名的类而且它没有抱怨之外) ,但是我还是试了一下,没有一个智能感知能够很好地工作。
我们正在尝试从 VB 转换到 C # ,但是 没有完成了所有代码的转换。我有一些新的代码,我需要写,但真的不想做一个新的项目,只是为了它。
我不明白你怎么能用 C # 编译器(或 VB 编译器)编译一个项目,而不让它在编译器的错误语言上犹豫不决。
将 C # 代码放在与 VB 项目分开的项目中。您可以将这些项目包括到同一个解决方案中。
您不能在同一个项目中混合 vb 和 c #-如果您注意到在 Visual Studio 中项目文件是。或。Csproj.您可以在一个解决方案内—— vb 中有1个 proj,c # 中有1个 proj。
看起来你可以在 App _ Code 目录下的 web 项目中同时使用它们:
Http://pietschsoft.com/post/2006/03/30/aspnet-20-use-vbnet-and-c-within-the-app_code-folder.aspx
不,你不能。一个程序集/项目(每个项目通常编译成一个程序集)必须是一种语言。但是,您可以使用多个程序集,并且每个程序集都可以用不同的语言进行编码,因为它们都被编译为 CIL。
它编译得很好,没有抱怨,因为一个 VB.NET 项目实际上只会编译。Vb 文件和 C # 项目实际上只能编译。Cs 文件。它忽略了其他的,因此您没有收到错误。
编辑: 如果添加。Vb 文件到 C # 项目中,在解决方案资源管理器面板中选择该文件,然后查看属性面板,您将注意到 Build Action 是“ Content”,而不是“ Compile”。它被视为一个简单的文本文件,甚至不作为二进制资源嵌入到已编译的程序集中。
编辑: 使用 asp.net 网站,你可以在 vb.net 网站中添加 c # web 用户控件
每种语言需要一个项目。我很有信心,我看到了一个工具,合并组装,如果你找到这个工具,你应该是好去。如果需要在同一个类中同时使用这两种语言,那么应该能够在例如 VB. net 中编写一半语言,然后通过继承 VB. net 类在 C # 中编写其余语言。
正如其他人所说,你不能把两者都放在一个项目中。但是,如果你只有一小段 C # 或 VB 代码,你想在一个项目中用另一种语言包含它们,那么就有自动 转换工具。他们并不完美,但大多数事情他们都做得很好。此外,夏普开发还内置了一个转换实用程序。
冒着重复其他答案的风险,不,你不能在同一个项目中混合使用它们。
除此之外,如果你刚刚完成了 VB 到 C # 的转换,你为什么要用 VB 写新的代码呢?
在某些自定义 MSBuild 开发中可能会出现这种情况。提供的。目标强制项目采用单一语言——但是没有运行时或工具限制来阻止这一点。
VB 和 CS 编译器都可以输出到 模组-CLR 的版本。Obj 文件。使用汇编链接器,您可以从 VB 和 CS 代码中获取模块,并生成单个汇编。
并不是说这将是一个微不足道的努力,但它可能会工作。
尽管 VisualStudio 不支持这一点(您可以使用一些技巧并让 MSBuild 编译两者,但不能从 VisualStudio 内部编译) ,但是 夏普开发支持。你可以在同一个解决方案中同时使用它们(只要你运行的是 Visual Studio Professional 及以上版本) ,所以如果你想继续使用 Visual Studio,最简单的解决方案就是将你的 VB 代码分离到不同的项目中,并以这种方式访问它。
为了。Net 2.0这个工作。如果您使用相关的语言代码创建应用程序代码的子目录,那么它确实可以在同一个项目中编译这两个目录。到目前为止,我正在寻找这是否应该工作在3.5或不尽管。
实际上,几年前我从一个同事那里继承了一个项目,他决定在同一个项目中混合使用 VB 和 C # 网络表单。这种做法奏效了,但维持起来一点也不有趣。
我决定新的代码应该是 C # 类,为了让它们工作,我必须在 web.config 的编译部分添加一个子节点
<codeSubDirectories> <add directoryName="VB"/> <add directoryName="CS"/> </codeSubDirectories>
所有 VB 代码放入 App _ Code 中的子文件夹 VB,C # 代码放入 CS 子文件夹。这将产生两个。Dll 文件。它可以工作,但是代码是按照“ codeSubDirectory”中列出的顺序编译的,因此,如果在 C # 和 VB 中都使用接口,那么接口应该在 VB 文件夹中。
中同时引用了 VB 和 C # 编译器
<system.codedom> <compilers>
该项目目前已经更新到框架3.5,并且仍然可以工作(但是维护起来仍然没有乐趣. .)
为什么不把 VB代码编译成一个库(.dll)呢。以后从代码中引用它,就是这样。托管 dlls包含编译 c#和 vb的 MSIL。
VB
.dll
dlls
c#
vb
MSIL
演练: 在网站项目 http://msdn.microsoft.com/en-us/library/ms366714.aspx中使用多种编程语言
默认情况下,App _ Code 文件夹不允许使用多种编程语言。然而,在网站项目中,您可以修改文件夹结构和配置设置,以支持多种编程语言,如 Visual Basic 和 C # 。这允许 ASP.NET 创建多个程序集,每种语言一个。有关更多信息,请参见 ASP.NET Web 项目中的共享代码文件夹。开发人员通常在 Web 应用程序中包含多种编程语言,以支持独立操作并偏好不同编程语言的多个开发团队。
不,不是在同一个项目中,但是你可以在同一个解决方案中使用它们。 尽管您需要注意您的代码是符合 CLS 的。这意味着您一定没有使用过其他语言无法理解的功能/特性。例如 VB 不理解无符号整数。
是的,您可以添加这两个文件在网站只有如果该项目是一个网络应用程序,它将不允许不同类型的文件。
右键单击“项目”。选择“添加 Asp.Net 文件夹”。 在“文件夹”下,创建两个文件夹,一个名为 VBCodeFiles,另一个名为 CSCodeFiles 在 Web.Config 中添加编译下的新元素
<compilation debug="true" targetFramework="4.5.1"> <codeSubDirectories> <add directoryName="VBCodeFiles"/> <add directoryName="CSCodeFiles"/> </codeSubDirectories> </compilation>
现在,创建一个 cshtml 页面。 添加对 VBCodeFiles.Namespace.MyClassName 的引用
@using DMH.VBCodeFiles.Utils.RCMHD @model MyClassname
其中 MyClassName 是在上面的命名空间中找到的类对象。 现在用 cshtml 文件写出剃须刀中的对象。
<p>@Model.FirstName</p>
请注意,如果这是一个 C # 项目,directoryName = “ CSCodeFiles”是多余的; 如果这是一个 VB.Net 项目,directoryName = “ VBCodeFiles”是多余的。
是的,这是可能的。将 c # 和 vb.net 项目添加到一个单一的解决方案中。
步骤1: 文件-> 添加-> 现有项目
第二步: 项目-> 添加引用-> dll 或者前面添加的项目的 exe。
步骤3: 在 vb.net 格式中,您希望使用 c # forms-> import project 的名称空间。
在我们的场景中,它是单个解决方案中的单个 VB.NET 项目(Windows 桌面应用程序)。然而,我们希望利用 VB.NET 中的 C # 特性,如有符号/无符号整数、 XML 文本和字符串特性。因此,根据不同的特性,在运行时我们构建代码文件,使用各自的 Rosalyn 编译器(VB/CS)编译成 DLL,并动态加载到当前程序集中。当然,如果我们大量使用动态 GUID 进行命名以避免冲突,我们必须对动态 DLL 和内存管理进行脱链、卸载、重载、命名等操作。 它工作良好,应用程序用户可以从我们的桌面应用程序连接到任何数据库,编写 SQL 查询,转换连接到 LINQ 连接和编写 LINQ 查询也都需要动态构建源代码,编译成 DLL 和附加到当前的汇编。