簡體   English   中英

在項目中“添加為鏈接”時如何引用dll?

[英]How do I reference dlls when “added as link” in project?

我在項目樹中有兩個dll文件(不是引用)。 它們作為鏈接添加,它們是解決方案中其他項目的程序集。 我正在嘗試將Build Action設置為Embedded Resource,因此我可以將它們導入.exe文件。 我不能用using語句寫,所以我不能在當前項目中引用它們。 怎么辦?

項目文件

您需要向程序集添加硬引用並將其Copy Local設置為False,然后在調用程序集之前將程序集從嵌入資源中提取到應用程序目錄。 您無法像想要的那樣引用鏈接(快捷方式)。

關鍵點(在此示例中)和博客文章與示例代碼

  • EmbeddedReferenceApplication硬引用EmbeddedReference.dll
  • EmbeddedReference引用屬性Copy Local設置為False
  • 鏈接的程序集(Add as Link)設置為Embedded Resource

這是一個有效的例子。 (EmbeddedReferenceApplication.exe |控制台應用程序)

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Reflection;
using EmbeddedReference; // Hard reference with Copy Local = False

namespace EmbeddedReferenceApplication {
    class Program {
        static void Main(string[] args) {
            AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve;
            MyMain();
        }

        private static void MyMain() {
            EmbeddedReference.MessageHelper.ShowMessage();
        }

        private static Assembly AppDomain_AssemblyResolve(object sender, ResolveEventArgs args) {
            string manifestResourceName = "EmbeddedReferenceApplication.EmbeddedReference.dll"; // You can also do Assembly.GetExecutingAssembly().GetManifestResourceNames();
            string path = Path.Combine(Application.StartupPath, manifestResourceName.Replace("EmbeddedReferenceApplication.", ""));
            ExtractEmbeddedAssembly(manifestResourceName, path);
            Assembly resolvedAssembly = Assembly.LoadFile(path);
            return resolvedAssembly;
        }

        private static void ExtractEmbeddedAssembly(string manifestResourceName, string path) {
            Assembly assembly = Assembly.GetExecutingAssembly();
            using (Stream stream = assembly.GetManifestResourceStream(manifestResourceName)) {
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                using (FileStream fstream = new FileStream(path, FileMode.Create)) {
                    fstream.Write(buffer, 0, buffer.Length);
                }
            }
        }
    }
}

在EmbeddedReference.dll中

using System;
using System.Collections.Generic;
using System.Text;

namespace EmbeddedReference {
    public static class MessageHelper {
        public static void ShowMessage() {
            Console.WriteLine("Hello World!");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM