【问题标题】:Combine C# and VB.NET in a solution在解决方案中结合 C# 和 VB.NET
【发布时间】:2012-03-02 14:06:37
【问题描述】:

我有一个解决方案,Winforms,主要由 VB.NET 项目(Wiforms、Constrols 和业务类)组成。

如何,我在其中添加了一个 WPF 项目,但它是用 C# 编写的。

实际上,每次我在 WPF C# 项目中进行修改时,我都需要(重新)构建 C#WPF 项目。

是否可以让它像其他 (VB.NET) 项目一样工作(接受并“查看”更改而不重建 C# 项目)?

一个例子:

当我在项目“M.VB”中引用项目“R.VB”时,我在“R.VB”中添加了一个方法“DoTest”并在“M.VB”中使用该方法而不会出现编译错误。

如果我在 C# WPF 控件中添加“DoTest”并尝试在“M.VB”项目中使用它,我会收到一个编译错误“DoTest”不是成员 od“R.C#Class”。

我的 VS 中的 C# 选项

【问题讨论】:

  • 即使一切都是用 C# 编写的,您也必须重新构建。你的问题毫无意义。
  • @Ramhound “如果一切都是用 C# 编写的,你将不得不重建”,我同意,但是在 VB.NET 中你不需要重建。

标签: c# .net vb.net visual-studio-2010


【解决方案1】:

不,C# 确实支持后台编译。

【讨论】:

  • C# 从 Visual Studio 2008 SP1 开始支持后台编译。但是make sure it is switched on
  • C#的后台编译与VB.net的不同。 C# 检查语法,但不使更改在程序集外可见。
【解决方案2】:

不-如果您更改需要重新编译的代码,至少我认为这是您要问的。

【讨论】:

  • 当我在项目“M.VB”中引用项目“R.VB”时,我在“R.VB”中添加了一个“DoTest”方法,并在“M.VB”中使用该方法而不使用编译错误。如果我在 C# WPF 控件中添加“DoTest”并尝试在“M.VB”项目中使用它,我会收到一个编译错误“DoTest”不是成员 od“R.C#Class”。
【解决方案3】:

您是否在同一个解决方案中同时拥有 VB.NET 项目和 C#/WPF 内容?如果您这样做,它们应该会自动重建。如果使用程序集引用,则需要手动完成。据我所知,.NET 不支持在不重建 VB6 样式的情况下更改代码...

【讨论】:

  • 当我在项目“M.VB”中引用项目“R.VB”时,我在“R.VB”中添加了一个方法“DoTest”,并在“M.VB”中使用该方法而不使用编译错误。如果我在 C# WPF 控件中添加“DoTest”并尝试在“M.VB”项目中使用它,我会收到一个编译错误“DoTest”不是成员 od“R.C#Class”。
【解决方案4】:

如果项目 A 引用项目 B,则在项目 B 重建之前,A 无法看到 B 中的更改。

但是,如果您在重新编译引用的项目之前想要自动完成和一些其他技巧,您可以使用查看源代码而不是编译输出的扩展,例如 ReSharper。

【讨论】:

  • 我不知道,我知道每次 C# 项目但任何 VB.NET 项目时我都需要重新编译,我引用的是项目,而不是 dll 的...
  • VB.NET 项目引用的行为可能不同 - 我是 C# 开发人员。当您引用 C# 项目时,您实际上是在引用所选配置(调试/发布/等)的已编译 dll。
  • 没错,jrummel,你说的是 C# 项目,但我说的是 VB(主)中的 C#(从),这是关于 VB.NET 项目,它的行为并不完全像C# 的。查看我的更新(示例)...
【解决方案5】:

如果您需要动态构建,可以查看project Roslyn

更多信息here

“开发人员还可以使用此类软件的输出更轻松地执行重构或重组代码等任务,将 C# 和 Visual Basic 功能添加到用其他语言编写的程序中。它还为静态类型添加动态类型C# 和 Visual Basic,允许开发人员在运行中向程序添加对象和新变量。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多