批文件注册程序集

原文:批文件注册程序集

1. 新建一个解决方案,命名为GAC。

2. 添加一个Class Library类库,命名为DbConn。

using System;

using System.Collections.Generic;

using System.Text;

namespace DbConn

{

public class Class1

{

public string GetCustomer()

{

return "Hello World!";

}

}

}

3. 在解决方案中继续添加一个Windows Form应用程序,命名为HellpApp。

添加DbConn的引用:右击引用->添加引用->项目,选中DbConn然后点击确定添加引用到Windows Form中。

添加一个按钮到Form1中,点击按钮调用Class1中的GetCustomer()方法,Form1.Designer.cs代码如下。

namespace HellpApp

{

partial class Form1

{

/// <summary>

/// 必需的设计器变量。

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// 清理所有正在使用的资源。

/// </summary>

/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#region Windows 窗体设计器生成的代码

/// <summary>

/// 设计器支持所需的方法 - 不要

/// 使用代码编辑器修改此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.button1 = new System.Windows.Forms.Button();

this.SuspendLayout();

//

// button1

//

this.button1.Location = new System.Drawing.Point(66, 89);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(75, 23);

this.button1.TabIndex = 0;

this.button1.Text = "Click";

this.button1.UseVisualStyleBackColor = true;

this.button1.Click += new System.EventHandler(this.button1_Click);

//

// Form1

//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(292, 266);

this.Controls.Add(this.button1);

this.Name = "Form1";

this.Text = "Form1";

this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.Button button1;

}

}

按钮点击事件代码如下,Form1.cs。

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using DbConn;

namespace HellpApp

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Class1 cl = new Class1();//Class1存在于另一个解决方案中

string str=cl.GetCustomer();

MessageBox.Show(str);

}

}

}

4. 编译以后或者按F5运行应用程序,会把HellpApp中引用的DbConn程序集复制到HellpApp目录中,运行时也就不行出现找不到程序集的错误。但是对于异步引用程序,可能有多个exe文件要访问DbConn程序集,为了实现程序集的重复部署和避免漏更新错误,往往要把程序集注册到注册表中,本机中的所有引用程序都可以访问即使他们不再同一个目录下。

5. 首先,要给待部署的程序集强命名。

Microsoft Visual Studio 2005->Visual Studio Tools->启用Visual Studio 2005命令提示。

然后,cd E:"Code"GAC"DbConn进入Class1.cs目录中。我的机器是保存在E盘,可以根据情况自己调整。

然后,sn –k DbConn.snk命令可以生成强命名文件。

打开DbConn项目的AssemblyInfo.cs文件,并添加强命名文件到项目配置文件中。

using System.Reflection;

using System.Runtime.CompilerServices;

using System.Runtime.InteropServices;

// 有关程序集的常规信息通过下列属性集

// 控制。更改这些属性值可修改

// 与程序集关联的信息。

[assembly: AssemblyTitle("DbConn")]

[assembly: AssemblyDescription("")]

[assembly: AssemblyConfiguration("")]

[assembly: AssemblyCompany("")]

[assembly: AssemblyProduct("DbConn")]

[assembly: AssemblyCopyright("版权所有 (C) 2008")]

[assembly: AssemblyTrademark("")]

[assembly: AssemblyCulture("")]

// 将 ComVisible 设置为 false 使此程序集中的类型

// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,

// 则将该类型上的 ComVisible 属性设置为 true。

[assembly: ComVisible(false)]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID

[assembly: Guid("19a9e567-b3b0-4d65-b997-1c2cebc36674")]

// 程序集的版本信息由下面四个值组成:

//

//      主版本

//      次版本

//      内部版本号

//      修订号

//

// 可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,

// 方法是按如下所示使用“*”:

[assembly: AssemblyVersion("1.0.0.1")]

[assembly: AssemblyFileVersion("1.0.0.1")]

[assembly: AssemblyKeyFile("DbConn.snk")]

重新编译DbConn项目文件,这个时候生成的dll文件是被强命名的,强名主要是为了防止多个公司的程序集同名问题。

6. 批文件注册程序集到GAC(Global Assembly Cache)中。

找到gacutil.exe文件,配置有.net环境的机器会默认安装。一般情况下,放在C:"Program Files"Microsoft Visual Studio 8"SDK"v2.0"Bin目录中。

复制一份gacutil.exe和gacutil.exe.config 文件到DbConn.dll目录中,也可以新建一个文件,但要保持他们在同一目录中。

新建一个文本文件到DbConn.dll目录中,并重命名为Reg.bat,右击Edit,批处理代码如下。

@ECHO Preparing for the registration

gacutil -u DbConn –如果存在同名,先卸载

gacutil -i DbConn.dll—安装程序集

@ECHO Registration process finished

Pause

7. 双击Reg.bat文件,程序集会被自动安装到GAC中。

8. 点击运行->输入assembly,点击确定会打开本机中注册的所有程序集,你会发现DbConn已经被注册了。

9. 这个时候,即使HellpApp和DbConn不在同一目录下,也可以成功的访问。所以,对于异步架构的系统很有帮助,可以解决一次部署,全部更新的作用。

10. 如果想要把部署工作做的更完善,也可以新建一个应用程序,点击按钮等操作来完成程序集的注册。

可以在直接用System.Diagnostics.Process.Start("batFilePath"Reg.bat")直接调用写好的批处理程序。

附录:

Difference between regasm.exe, regsvcs.exe and gacutil.exe

1.gacutil.exe

used for putting shared assembly in GAC( global Assembly Cache- Place for shared assemblies to share among applications)

2.regsvcs.exe

Generates, registers, and installs a type library into a specified COM+ 1.0 application.

3.regasm.exe.

For making dotnet assemblies to interact with any com objects.

Hope this gives you a bird-view of the same..

Since you are new to .NET,I think u don‘t need to study all the tools provided by the dotnet SDK.

al.exe程序集链接

如果该DLL是托管的,你可以把它解析为IL(ildasm   /source   test.dll   /out:test.il   )

时间: 2024-10-26 05:49:58

批文件注册程序集的相关文章

asp.net Web.config中assembly注册程序集的目的

asp.net的Web.config中用assembly注册程序集 asp.net的Web.config中用assembly注册程序集的目的是什么? .net framewok2.0 提供了表示Framework的各个部件的大量程序集.这些程序集存储在全局程序集缓存中,该缓存是程序集的版本化存储库,可供计算机上的所有应用程序使用(而不像Bin和App_Code目录仅限于特定的应用程序).Framework中的多个程序集都可自动提供给Asp.net应用程序.通过在应用程序的Web.config文件

[转] “无法注册程序集***dll- 拒绝访问。请确保您正在以管理员身份运行应用程序。对注册表项”***“的访问被拒绝

原文 Win8下Visual Studio编译报“无法注册程序集***dll- 拒绝访问.请确保您正在以管理员身份运行应用程序.对注册表项”***“的访问被拒绝.”问题修正 原来在Win7下Visual Studio跑的好好的程序,现在在Win8下编译报“无法注册程序集***dll- 拒绝访问.请确保您正在以管理员身份运行应用程序.对注册表项”***“的访问被拒绝.”的错误.报错信息明面上看是让你用管理员身份运行Visual Studio,然后打开工程编译就好了.但总觉得这种方法不如直接双击“s

c# 未能载入文件或程序集

近期做项目时碰到这个问题了.goole.百度了半天,整理了下面几种可能: DLL文件名称与载入时的DLL文件名称不一致, DLL文件根本不存在,即出现丢失情况, 载入DLL路径错误,即DLL文件存在,但载入路径不对 程序集版本号错误.我A.dll内部引用的b.dll是1.0版本号,而实绩提供的b.dll是2.0的版本号,所以在winfrom设计界面就报了这个找不到依赖项的错误. 主要原因是 引用的项目 .net 版本号与启动的框架不同. 在我的项目中,原来是VS2008也就是.NET3.5的框架

&amp;quot;未能载入文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件&amp;quot;的解决方式

今天在写反射调用的时候失败了,经过调试和分析,终于攻克了,以下我就详细说明. 一,报错的现象 未能载入文件或程序集"DalSQL"或它的某一个依赖项.系统找不到指定的文件. 说明: 运行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的具体信息. 异常具体信息: System.IO.FileNotFoundException: 未能载入文件或程序集"DalSQL"或它的某一个依赖项. 系统找不到指定的文件. 错

微信小程序-06-详解介绍.js 逻辑层文件-注册页面

上一篇介绍的是 app.js 逻辑层文件中注册程序,对应的每个分页面都会有的 js 文件中 page() 函数注册页面 微信小程序-06-详解介绍.js 逻辑层文件-注册页面 宝典官方文档: https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html 今天开始深度学习编程语法,虽然大部分是拷贝官方文档,代码类都是我自己敲的,希望能自己敲一遍表格里的内容,熟悉一下操作 页面 Page Page(Object) Page(

将BAT文件注册为服务的方法

一.什么是instsrv.exe和srvany.exe instsrv.exe.exe和srvany.exe是Microsoft Windows Resource Kits工具集中 的两个实用工具,这两个工具配合使用可以将任何的exe应用程序作为window服务运行.srany.exe是注册程序的服务外壳,可以通过它让应用程序以system账号启动,可以使应用程序作为windows的服务随机器启动而自动启动,从而隐藏不必要的窗口,例如:应用程序控制台等.那么我们肯定想是不是安装srvany.ex

使用VMDX文件注册虚拟机

克隆或复制完整虚机文件备份至异地存储并添加至清单(注册虚拟机) 1.克隆或复制完整虚机文件备份至异地vC存储 (此操作有可能对现有系统造成影响,建议关机进行,如果是单机系统情况下,可以使用克隆) ① 新建文件夹,将需要克隆的虚拟机文件复制放置到新建文件夹中 ② 直接克隆虚拟机 2.在异地vC平台上添加虚拟机 点击存放存储的克隆虚拟机文件vmdx或复制的虚拟机vmdx,右击添加至清单. 会出现新建虚拟机向导. 其他: 如果是在同一存储下复制虚拟机或是克隆虚拟机文件. 添加虚拟机至清单将提示是移动还

.OCX、.dll文件注册命令Regsvr32的使用

1.打开文件,打开需要注册的OCX文件或dll文件,2.然后根据需要进行OCX文件或DLL文件的注册和反注册 DLL.OCX注册方法--文件Regsvr32用法及情况介绍 使用过activex的人都知道,activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册,但如果你拿到的一个控件需要手动注册怎么办呢?如果修改注册表那就太麻烦了,在windows的system文件夹下有一个regsvr32.exe的程序,它就是windows自带的activex注

springboot打包jar文件注册成windows service

首先,准备好maven打包好的springboot的jar文件 1.先从git上(https://github.com/kohsuke/winsw/releases)下载图中标出的文件 2. 新建一个xml文件,配置服务注册信息,写入以下内容: <?xml version="1.0" encoding="UTF-8"?> <service> <!--服务ID--> <id>Unique windows service