《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-14 项目同时使用C# 与VB语言及多组件的技巧

简介: 早期VS.NET 2002及VS.NET 2003的Visual Studio工具不支持多个组件文件(Assembly),也就是项目编译后只会产生一个dll组件,而一个组件只允许包含一种语言(因为系统会调用对应C#或VB编译程序进行编译),因此在同一个项目中要使用两种语言是办不到的;但在VS 2010中,因为项目支持多个组件,所以利用这个特性就可以同时使用两种以上的语言(如C#与VB),因此.cs或.vb的类别在项目中就可以直接拿来使用,直接就可以new instance,不需要先编译成dll文件再加以引用。

本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第1章,第14节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1-14 项目同时使用C# 与VB语言及多组件的技巧

圣殿祭司的ASP.NET4.0专家技术手册
早期VS.NET 2002及VS.NET 2003的Visual Studio工具不支持多个组件文件(Assembly),也就是项目编译后只会产生一个dll组件,而一个组件只允许包含一种语言(因为系统会调用对应C#或VB编译程序进行编译),因此在同一个项目中要使用两种语言是办不到的;但在VS 2010中,因为项目支持多个组件,所以利用这个特性就可以同时使用两种以上的语言(如C#与VB),因此.cs或.vb的类别在项目中就可以直接拿来使用,直接就可以new instance,不需要先编译成dll文件再加以引用。这样一来对于许多公司或程序员来说,灵活性变大了。

至于项目支持多个组件是如何办到的?在前面提到ASP.NET中有许多内建特殊文件夹,如App_Code、App_GlobalResources等,只要归类在这些文件夹的文件,在编译时就会产生独立的组件,各位可以建立一个项目进行测试,加入类文件、资源文件、Web Services等,最后再用aspnet_compiler.exe预编译后,再检查编译后目标路径的bin目录,里面同时包含好几个dll文件,就是证据。

范例1-9 ASP.NET 4.0项目同时使用C#与VB类程序
利用多个组件的原理,在ASP.NET 4.0项目中可同时使用C#与VB类程序,如图1-46所示。但必须遵守一些程序及技巧,请参考MultiLang. aspx程序。具体步骤如下。


954aedd47eb4d13eae9b2cbd570a08a214e19b20

如果C#项目中使用到VB的相关功能,请自行加入相关命名空间的参照,以及在VB程序中Import命名空间。

在Web.config文件中设置C# 与VB目录分隔:

<configuration>
    <system.web>
        <compilation>
            <codeSubDirectories>
                <add directoryName="cs"/>
                <add directoryName="vb"/>
            </codeSubDirectories>
        </compilation>
    </system.web>
</configuration>

上面的directoryName是对应下一个步骤cs及vb所要加入的目录名称。

在网站上按鼠标右键,在弹出的菜单中选择【属性页】→【加入ASP.NET文件夹】→加入“App_Code”文件夹,在App_Code文件夹中加入“cs”及“vb”两个文件夹,以作为C#与VB类各自存放的目录,如图1-47所示。


c27d0bb4272a91f70d86aededfc1b29ddb463ab9

在cs文件夹中加入CSharpObject.cs类程序:

using System;
public class CSharpObject
{
    public string Hello()
    {
        return "Hi...C#";
    }
}

在vb文件夹中加入VBObject.vb类程序:

Imports Microsoft.VisualBasic
Public Class VBObject
    Public Function Hello() As String
        Return "Hi...VB"
    End Function
End Class

分别双击“调用C#类”及“调用VB类”按钮加入Click事件程序:

01   /调用C#类
02   protected void btnCSharp_Click(object sender, EventArgs e)
03   {
04   CSharpObject myCSharpObject = new CSharpObject();
05   txtMsg1.Text = myCSharpObject.Hello();
06
07    
08    //调用VB类
09    protected void btnVB_Click(object sender, EventArgs e)
10    {
11        VBObject myVBObject = new VBObject();
12        txtMsg2.Text = myVBObject.Hello();
13    }

附注 (1)在VS.NET 2003中,若项目必须使用多个组件,虽说Visual Studio本身不支持,
但可使用Assembly Linker(AL.exe)手工来完成,并非.NET不能做。

(2)同时使用C# 与VB类别程序,并非是指在同一个类别中可以穿插混合使用两种语
言,如1、3、5行使用C#,2、4、6行使用VB,倘若这样,只会造成大乱。

(3)在这只是告知VS 2010中要如何使用两种语言,至于一个项目是否应该同时使用
C#或VB两种语言,它有实际面、策略面的议题,故要不要用,必须由贵公司或项
目本身需求去评量决策,祭司不发表意见。
此外要提出一个思考点,上面理论的确很精采,也确实能够正常执行运作,但是如何证明真的会产生多个组件?若不能证明的话,信或不信比例可能各占一半。然而要证明它有点困难,因为VS 2010构建编译网站后,不会像VS.NET 2003在项目所在路径下的Bin目录中产生一个dll组件,所以,根本没法查看是否有多个组件,那怎办?还记得前面介绍过aspnet_compiler.exe预编译这个工具吗?在此利用这个工具编译“VS2010IDE”项目,指令如下:

Aspnet_compiler –v VS2010IDE C:\TMP\VS2010IDE –f
编译后的项目会输出到C:TMPVS2010IDE,接着到该路径下的Bin目录,可以发现确实按照目录而产生AppSubcode_cs.dll与App Subcode_vb.dll两个组件,如图1-48所示,这样就能得到验证!

即便项目没有同时使用VB与C# 两种语言的需求,是否这个技巧就没有其他附加价值呢?还是可以利用相同的原理做出多个组件,而不必每次都调用一个很庞大的dll组件,这样不但系统略为笨重,且又会非常耗用资源,如果项目程序十分庞大,可利用这个技巧产生多个组件,有意义地分解成多个较小组件,求得更佳的系统性能。


734f1bec5497e9bab16ab2ed1ea24cf539564ee7

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
2月前
|
C# 开发工具 C++
code runner 运行C#项目
本文介绍了如何修改Code Runner设置使 Visual Studio Code (VS Code) 能直接运行完整的 C# 项目。传统方式依赖 cscript 工具,仅支持 .csx 文件,功能受限且已停止维护。新配置使用 `dotnet run` 命令,结合一系列炫酷的cmd指令,将指令定位到具体的csproj文件上进行运行。
116 38
|
3月前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
151 18
|
3月前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
100 12
|
3月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
|
3月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
3月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
3月前
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
107 5
|
3月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
172 13
|
4月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
4月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。