我正在使用C ++ / CLI制作一个photoshop插件。项目中的某些文件被编译为本机代码,一个文件被编译为托管代码。因此,我无法在项目级别添加对程序集的引用,而是通过#using
语句在文件级别添加引用。
我成功引用了System.dll
,Windows.dll
,PresentationFramework.dll
和WindowsBase.dll
。 (intellisense存在一些问题,它们不想加载元数据,但编译时没有错误。我通过声明程序集的全名解决了intellisense问题。)
但是,我无法添加对我自己的非框架程序集的引用。当我在Photoshop中加载插件并进行调试时,我收到以下错误>
未处理的类型' System.IO.FileNotFoundException'发生在未知模块中。
其他信息:无法加载文件或程序集' ColorPickerControl,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 2317994184a7a708'或其中一个依赖项。系统找不到指定的文件。
我尝试更改我的dll的目标框架,使程序集共享(公共) - 因此PublicKeyToken
不为null - 将其他程序集名称返回到其短名称(我更改了它们因为intellisense未加载元数据)。没有工作。
有什么建议吗?这可能是目标框架的一个问题,但我不知道应该说明什么是目标框架。它是C ++ / CLI - 没有像C#那样的属性对话框,您可以在其中轻松选择目标框架。
我的代码:
#using <System.dll>
#using <PresentationCore.dll>
#using <PresentationFramework.dll>
#using <WindowsBase.dll>
#using <C:\Users\Bogdan\Desktop\ColorPickerControl.dll>
using namespace System;
using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace System::Windows::Media;
//using namespace ColorPickerControlNamespace;
char __cdecl fManaged2(const char* input)
{
Window^ w = gcnew Window();
Label^ l = gcnew Label();
l->Content = "This works!";
l->Background = Brushes::Orange;
TextBox^ txt = gcnew TextBox();
txt->Width = 300;
txt->Height = 25;
Grid^ g = gcnew Grid();
g->Children->Add(l);
g->Children->Add(txt);
ColorPickerControlNamespace::ColorPickerControl^ c = gcnew ColorPickerControlNamespace::ColorPickerControl();
w->Content = g;
w->ShowDialog();
Byte bb = Convert::ToByte(txt->Text);
return bb;
}