美文网首页
windows .net assembly的使用例子

windows .net assembly的使用例子

作者: CodingCode | 来源:发表于2023-11-17 09:13 被阅读0次
    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,分开篇介绍

    相关文章

      网友评论

          本文标题:windows .net assembly的使用例子

          本文链接:https://www.haomeiwen.com/subject/kabywdtx.html