- 编译生成assembly
假设有源文件myassembly.cs
// Assembly building example in the .NET Framework.
using System;
namespace myassembly
{
public class MyString
{
public void MyStringFunc()
{
System.Console.WriteLine("In myassembly:MyString:MyStringFunc()");
}
}
}
编译:
C:\> csc.exe /out:myassembly.dll /target:library myassembly.cs
这样你就会生成一个myassembly.dll文件。
注意虽然也叫.dll文件,但是和windows c/c++的dll不是一个概念,有很大的差异。
- 如何使用这个assembly
定义应用程序 myapp.cs
using System;
using myassembly;
class MainClientApp
{
// Static method Main is the entry point method.
public static void Main()
{
Console.WriteLine("In myapp:Main()");
MyString myString = new MyString();
myString. MyStringFunc();
}
}
编译运行:
C:\> csc.exe /reference:myassembly.dll myapp.cs
C:\> myapp.exe
In myapp:Main()
In myassembly:MyString:MyStringFunc()
至此整个assembly的过程就跑通了。
- assembly和application在不同的路径下
对于assembly的编译过程一样,对于application的编译需要指定路径,同样用/reference
参数指定就可以。
C:\> csc.exe /reference:path\to\myassembly.dll myapp.cs
然后运行:
C:\> myapp.exe
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'myassembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
at MainClientApp.Main()
那么必须指定myassembly.dll的路径。
前面提到myassembly.dll虽然也是dll文件,但是和C/C++的dll不是一个概念,所以也不能用PATH来制定搜索路径。
这个细节比较复杂,可以直接网上搜搜;主要有三种常见做法:
- 把myassembly.dll拷贝到myapp.exe的同一个路径下面。
- 使用myapp.exe.config文件配置。
就是在myapp.exe所在路径下面创建一个文本文件后缀(.config,注意前面和可执行程序名必须一样,如果程序名带.exe则配置文件也就是必须要带上.exe),例如myapp.exe.config:
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="path\to" />
</assemblyBinding>
</runtime>
</configuration>
这里privatePath只需要指定path就行了,不需要包含dll文件本身。
- 使用GAC,分开篇介绍
网友评论