【问题标题】:CodeDom ReferencedAssemblies absolute pathCodeDom ReferencedAssemblies 绝对路径
【发布时间】:2012-07-21 04:56:02
【问题描述】:

我正在使用WPF forms 创建一个新的.exe。问题是,我需要引用一些程序集。

这就是我添加它们的方式:

var p = new CompilerParameters
{
    GenerateExecutable = true,
    TreatWarningsAsErrors = false,
    CompilerOptions = "/t:winexe",
    IncludeDebugInformation = false,
    OutputAssembly = dlg.FileName,
};


string[] assemblies = {
    "System", "System.Core", "System.Data", "mscorlib",
    "System.Drawing", "System.Windows.Forms", "Microsoft.CSharp",
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase",
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore",
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFrameWork"
};

foreach (string a in assemblies)
{
    p.ReferencedAssemblies.Add(a + ".dll");
}

这工作正常,但你会注意到我必须输入Windowsbase.dllPresentationCore.dllPresentationFrameWork.dll 的绝对路径,否则它会因为找不到它们而引发错误。 这可能不适用于所有计算机。

我能做什么?

(我想我可以在项目文件夹中包含 3 个.dll 并将它们与应用程序一起发送并引用相对路径(如果它有效,我现在无法测试它),但是还有其他方式?)

【问题讨论】:

  • 您确定这些程序集已在 GAC 中注册吗?这可能是他们没有被发现的原因。
  • GAC 是什么意思?在 VS 或 .NET Framework 中没有更改任何内容。

标签: c# .net wpf assemblies codedom


【解决方案1】:

一种作弊方法是,如果您在项目中引用该 dll,您可以执行以下操作:

typeof(System.Windows.Point).Assembly.Location

这将使您摆脱 WindowsBase 问题。

【讨论】:

    【解决方案2】:

    您应该确保有问题的程序集已在 GAC (Global Assembly Cache) 中注册,因为当未提供绝对路径时,您的应用程序最终会在此处查找它们。

    您可以通过浏览到C:\Windows\Assembly(假设C:\Windows 是您的Windows 安装目录)来检查哪些程序集已注册到GAC。

    【讨论】:

    • 看起来这些.dll在GAC中不是默认的,我会和一些人分享这个项目,所以我不希望他们有太大的改变(比如GAC)。跨度>
    • @Mek 对于任何安装了最新 .NET Framework 的计算机,这些程序集都应该在 GAC 中。它们不在您的计算机上的事实可能意味着您没有安装它或安装已损坏。
    • 我在 2 台 PC 和带有最新更新 + .NET Framework 的 VM 上对其进行了测试,但没有成功。
    • @Mek 我不确定ReferencedAssemblies 属性是否可以这样工作,但是您是否尝试过传递完全限定的程序集名称?例如,PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35?
    • 好的,我设法以另一种方式加载了 2 个 .dll,只有 WindowsBase 给我带来了一些问题。我查看了 C:\Windows\Assembly 并注册了 WindowsBase,为什么它不起作用?我该如何解决?
    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 2010-09-15
    • 2013-04-17
    • 1970-01-01
    • 2012-10-16
    • 2013-07-14
    • 2010-12-17
    • 2018-06-09
    相关资源
    最近更新 更多