3

我正在.exeWPF forms. 问题是,我需要引用一些程序集。

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

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.dll否则PresentationFrameWork.dll它会因为找不到它们而引发错误。这可能不适用于所有计算机。

我能做什么?

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

4

2 回答 2

2

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

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

这将使您摆脱 WindowsBase 问题。

于 2016-10-01T15:33:13.010 回答
0

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

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

于 2012-07-22T22:26:50.263 回答