时间:2010-07-23 14:23:10

标签: c# asp.net vb.net

4 个答案:

答案 0 :(得分:2)

我认为我发现了问题并且似乎没有反映你不能作为交叉参考。

原因很简单,取决于你定义codeSubDirectories的顺序,我想你是这样做的:

<codeSubDirectories>
    <add directoryName="CSCode"/>
    <add directoryName="VBCode"/>
</codeSubDirectories>

我们知道每个目录都将构建到不同的程序集,并且它们将根据您的设置从上到下逐个构建。

因此,当您首先定义CSCode文件夹时,它将首先构建,然后编译器开始构建VBCode,因此使用CS类是可以的,因为它可以找到要引用的程序集。

但是如果你反过来,正如你提到的那样在CS中引用VB代码,它首先构建CSCode文件夹,那时VBCode的程序集不存在所以它会抛出异常。

因此,为了让它与CS一起使用VB,只需更改文件夹设置顺序:

<codeSubDirectories>
    <add directoryName="VBCode"/>
    <add directoryName="CSCode"/>
</codeSubDirectories>

但是那时你将失去在VB中使用任何CS类的能力,因为这次VBCode首先编译。

所以我的建议是反思在运行时加载它,以便编译器可以让你离开。

希望我的解释足够清楚。

由于

答案 1 :(得分:1)

使用/ Imports作为跳过完全限定名称空间的快捷方式的最佳方法。 vb和c#的行为相同。

考虑以下示例:

完全qualyfying:

void DoSomething()
{
    var p = new Interfaces.CPDATA.DataHolders.Placement(); 
}

跳过命名空间:

using Interfaces.CPDATA.DataHolders; 
void DoSomething()
{
    var p = new Placement(); 
    var t = new Trade(); 
}    

和一个小捷径技巧

using data = Interfaces.CPDATA.DataHolders; 
void DoSomething()
{
    var p = new data.Placement(); 
    var t = new data.Trade(); 
}   

和替代技巧:

using t = Interfaces.CPDATA.DataHolders.Placement; 
void DoSomething()
{
    var p = new t(); // happy debagging
}   

对于ASP.NET App_Code文件夹中不同语言的代码文件:不要使用它。为:

  • 使用Web应用程序项目时无法正常工作
  • 在Visual Studio
  • 之外的持续集成项目中使用csc或vbc编译器时,它们不会编译
  • 他们通常会在基础设施方面给你带来很多痛苦。

最好的方法是为各自的语言创建单独的类库项目并使用它们。

最重要的是,在visual studio和iis下运行这样的项目时会发生很多有趣的事情。如果您很好奇,可以查看

中的各种文件
\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\{project name}\{tempname} 

它应该让你知道asp.net引擎如何结合aspx页面的代码文件。

针对这些无用的信息,我们现在可以告诉我们在同一名称空间语句“Imports CSTestClass”中使用CSTestClass类并不是很有用。好的编码风格是将所有这些包装在命名空间语句MyWebProject.VbCode和MyWebProject.CsCode中。然后语句“使用MyWebProject.VbCode”和“Imports MyWebProject.CsCode”对编译器更有意义。

答案 2 :(得分:0)

答案 3 :(得分:0)