答案 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文件夹中不同语言的代码文件:不要使用它。为:
最好的方法是为各自的语言创建单独的类库项目并使用它们。
最重要的是,在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)