C#编译器嵌入式资源访问

时间:2019-03-11 16:53:15

标签: c# build compiler-construction resources ico

我需要制作一个可执行文件,然后使其成为自己的可执行文件。

问题是,我正在使用嵌入式资源.. 它们也必须位于已编译的exe中。

那么问题来了,这是怎么了? :

我正在使用以下编译器选项进行构建:

cp.IncludeDebugInformation = false;
cp.GenerateExecutable = true;
cp.GenerateInMemory = false;
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Drawing.dll");
cp.ReferencedAssemblies.Add("System.Management.dll");
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
cp.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
cp.ReferencedAssemblies.Add("Microsoft.CSharp.dll");

cp.ReferencedAssemblies.Add(AppDomain.CurrentDomain.BaseDirectory +"\\Resources" + "\\IconLib.dll");  

cp.ReferencedAssemblies.Add(AppDomain.CurrentDomain.BaseDirectory + "\\Resources" + "\\Microsoft.Office.Interop.Outlook.dll"); 


cp.EmbeddedResources.Add(AppDomain.CurrentDomain.BaseDirectory + "\\Resources" + "\\IconLib.dll");

cp.EmbeddedResources.Add(AppDomain.CurrentDomain.BaseDirectory + "\\Resources" + "\\outlook.ico");

cp.EmbeddedResources.Add(AppDomain.CurrentDomain.BaseDirectory + "\\Resources" + "\\Source.cs");

cp.CompilerOptions = "/filealign:0x00200 /optimize+ /platform:X86 /debug- /target:winexe";

该exe可以很好地执行exe,并且所包含的dll类似于Microsoft。和IconLib.dll似乎可以正常工作,但应用程序可以交互!

当编译的exe尝试访问资源时,例如Outlook.ico,它会崩溃。

这是资源的呼唤:

var notification = new System.Windows.Forms.NotifyIcon()
 {
  Visible = true,
  **Icon = Main.Properties.Resources.outlook,**
  BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info,
  BalloonTipTitle = TT,
  BalloonTipText = Tt,
 };

调用嵌入式资源时,应用程序崩溃。  我该如何解决?

目标exe的命名空间属性:

namespace Main.Properties {
    using System;

    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    internal class Resources {

        private static global::System.Resources.ResourceManager resourceMan;

        private static global::System.Globalization.CultureInfo resourceCulture;

        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        internal Resources() {
        }

        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Resources.ResourceManager ResourceManager {
            get {
                if (object.ReferenceEquals(resourceMan, null)) {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Main.Properties.Resources", typeof(Resources).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }

        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Globalization.CultureInfo Culture {
            get {
                return resourceCulture;
            }
            set {
                resourceCulture = value;
            }
        }

        internal static byte[] IconLib {
            get {
                object obj = ResourceManager.GetObject("IconLib", resourceCulture);
                return ((byte[])(obj));
            }
        }

        internal static System.Drawing.Icon outlook {
            get {
                object obj = ResourceManager.GetObject("outlook", resourceCulture);
                return ((System.Drawing.Icon)(obj));
            }
        }

        internal static string Source {
            get {
                return ResourceManager.GetString("Source", resourceCulture);
            }
        }
    }
}

用于嵌入资源的代码是否错误? 他是否在使用电话而不是资源使用其他文件夹? 我需要链接它们吗? 这里有很多问题。

0 个答案:

没有答案