首页 文章

在同一个项目中混合使用C#和VB

提问于
浏览
134

你能在一个类库的同一个项目中混合使用vb和c#文件吗?是否有一些设置可以实现?

虽然后台编译器似乎能够很好地处理它,但是我尝试并没有智能感知器工作得很好(除了我,然后,在同一名称空间中有2个类具有相同名称并且它没有抱怨) .

我们正在尝试从VB转换为C#,但 haven't 已完成转换所有代码 . 我有一些我需要编写的新代码,但并不是真的想要为它创建一个新项目 .

17 回答

  • 121

    不,不在同一个项目中 . 但您可以在同一个解决方案中使用它们 . 虽然您需要注意您的代码符合CLS . 这意味着您不得使用其他语言无法理解的功能/功能 . 例如,VB不理解无符号整数 .

  • 1

    好吧,实际上我几年前从同事那里继承了一个项目,该同事决定在同一个项目中混合使用VB和C#webforms . 虽然有效,但维护起来却很有趣 .

    我决定新代码应该是C#类并让它们工作我必须在web.config的编译部分添加一个子节点

    <codeSubDirectories>
                <add directoryName="VB"/>
                <add directoryName="CS"/>
            </codeSubDirectories>
    

    所有VB代码都进入App_Code中的子文件夹VB,C#代码进入CS子文件夹 . 这将生成两个.dll文件 . 它工作正常,但代码的编译顺序与“codeSubDirectories”中列出的相同,因此如果在C#和VB中使用,则接口应该在VB文件夹中 .

    我有一个VB和C#编译器的引用

    <system.codedom>
        <compilers>
    

    该项目目前更新为框架3.5,它仍然有效(但仍然没有乐趣维护......)

  • 6

    是的,您只能在网站中添加这两个文件 . 如果项目是Web应用程序,则不允许使用不同类型的文件 .

  • 0

    不,你不能 . 程序集/项目(每个项目通常编译为1个程序集)必须是一种语言 . 但是,您可以使用多个程序集,并且每个程序集都可以使用不同的语言编码,因为它们都编译为MSIL .

    它编译得很好,并没有抱怨,因为VB.NET项目只会实际编译.vb文件,而C#项目只会实际编译.cs文件 . 它忽略了其他的,因此你没有收到错误 .

    Edit: 如果将.vb文件添加到C#项目,请在“解决方案资源管理器”面板中选择该文件,然后查看“属性”面板,您甚至可以将已编译的程序集作为二进制资源嵌入到已编译的程序集中 . [450465_内容', not '编译'. It is treated as a simple text file and doesn']

    Edit: 使用asp.net网站,您可以将c#web用户控件添加到vb.net网站

  • 1

    正如其他人所说,你不能把它们放在一个项目中 . 但是,如果您只想将一小段C#或VB代码包含在另一种语言的项目中,则会自动conversion tools . 他们并不完美,但他们做得很好 . 此外,SharpDevelop内置了转换实用程序 .

  • 20

    我不知道如何使用C#编译器(或VB编译器)编译项目,并且不会让编译器使用错误的语言 .

    将您的C#代码保存在VB项目的单独项目中 . 您可以将这些项目包含在同一解决方案中 .

  • 7

    每种语言需要一个项目 . 我非常有信心看到一个合并装配的工具,如果你发现这个工具你应该很好 . 如果你需要在同一个类中使用这两种语言,你应该能够在VB.net中编写一半语言,然后通过继承VB.net类在C#中编写其余的语言 .

  • 12

    是的,可以将c#和vb.net项目添加到一个解决方案中 .

    step1:文件 - >添加 - >现有项目

    Step2:项目 - >添加之前添加的reference-> dll或exe项目 .

    step3:在vb.net表单中,你想使用c#forms-> import namespace of project .

  • 2

    可能有一些自定义的MSBuild开发 . 提供的.targets强制项目为单一语言 - 但没有运行时或工具限制阻止这一点 .

    VB和CS编译器都可以输出到模块 - CLR的.obj文件版本 . 使用程序集链接器,您可以从VB和CS代码中获取模块并生成单个程序集 .

    并不是说这将是一项艰巨的努力,但它可能会奏效 .

  • 0

    虽然Visual Studio不支持这个(你可以做一些技巧并让MSBuild编译两者,但不能从Visual Studio中编译),SharpDevelop可以 . 您可以将两者放在同一个解决方案中(只要您运行Visual Studio Professional及更高版本),因此如果您想继续使用Visual Studio,最简单的解决方案是将VB代码分离到不同的项目中并以这种方式访问它 .

  • -1

    有可能回应所有其他答案,不,你不能在同一个项目中混合它们 .

    除此之外,如果您刚刚将VB转换为C#,为什么要在VB中编写新代码?

  • 2

    你为什么不把你的 VB 代码编译成一个库( .dll ) . 稍后从你的代码中引用它,就是这样 . 托管 dlls 包含编译 c#vbMSIL .

  • 1

    对于.net 2.0,这是有效的 . 如果您使用相关语言代码创建应用程序代码的子目录,它将在同一项目中编译 . 到目前为止,我正在寻找这是否应该在3.5中工作 .

  • 32

    演练:在网站项目中使用多种编程语言http://msdn.microsoft.com/en-us/library/ms366714.aspx

    默认情况下,App_Code文件夹不允许使用多种编程语言 . 但是,在Web站点项目中,您可以修改文件夹结构和配置设置,以支持多种编程语言,如Visual Basic和C# . 这允许ASP.NET创建多个程序集,每种语言一个 . 有关更多信息,请参阅ASP.NET Web项目中的共享代码文件夹 . 开发人员通常在Web应用程序中包含多种编程语言,以支持独立运行并喜欢不同编程语言的多个开发团队 .

  • 1

    你不能在同一个项目中混合使用vb和c# - 如果你在visual studio中注意到项目文件是.vbproj或.csproj . 你可以在解决方案中 - 在vb中有1个proj,在c#中有1个 .

    看起来像这样你可以在App_Code目录中的web项目中使用它们:

    http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App_Code-folder.aspx

  • 2

    查看此链接,该链接讨论了该问题,并展示了如何在.NET 4.0中的一个项目中组合VB和C#代码

    http://msdn.microsoft.com/en-us/library/t990ks23.aspx

  • 1

    右键单击“项目” . 选择Add Asp.Net Folder . 在The Folder下,创建两个名为VBCodeFiles的文件夹和其他CSCodeFiles In 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”是多余的 .

相关问题