windows .net assembly的使用例子

2023-11-17  本文已影响0人  CodingCode
  1. 编译生成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不是一个概念,有很大的差异。

  1. 如何使用这个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的过程就跑通了。

  1. 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来制定搜索路径。

这个细节比较复杂,可以直接网上搜搜;主要有三种常见做法:

  1. 把myassembly.dll拷贝到myapp.exe的同一个路径下面。
  2. 使用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文件本身。

  1. 使用GAC,分开篇介绍
上一篇 下一篇

猜你喜欢

热点阅读