我们有一个托管的dll,它实现了一个在Cpp名称空间中派生自HwndHost的公共引用类。 我们构建了一个名为mydll10.dll的x86版本和一个名为mydll10_x64.dll的x64版本。 我们在xaml页面的WPF应用程序中使用Cpp名称空间。我们可以使用'$(Platform)'条件在项目中添加适当的引用。 但我们应该在同一页面中使用 xmlns:c =“clr-namespace:Cpp; assembly = UvpProInspectWpf10”,用于x86和xmlns:c =“clr-namespace:Cpp; assembly = UvpProInspectWpf10_x64”,用于x64 exe。 在xaml中不可能使用任何类型的#if #then #else。
如果Cpp名称空间位于C#项目中,则可以在写入
中使用解决方案`myurl:"http://schemas.me.com/wpf/"
#if x64
[assembly: XmlnsDefinition(myurl, "UvpProInspectWpf10_x64")]
#else
[assembly: XmlnsDefinition(myurl, "UvpProInspectWpf10")]
#endif
Assembly.cs文件并定义
xmlns:c=" http://schemas.me.com/wpf/”
在xaml中。 我找不到如何在托管C ++项目中执行这些程序集定义。 这可能吗? 当然,我们可以打破我们的命名规则...... 感谢
答案 0 :(得分:1)
找到它。 将System.Xaml.dll的引用添加到C ++托管项目。 使用
添加AssemblyInfo.cpp文件using namespace System::Windows::Markup;
[assembly:XmlnsDefinition("http://schemas.me.com/wpf/", "Cpp")];
然后你可以在xaml页面中使用
xmlns:c=" http://schemas.me.com/wpf/”
项目引用了正确的x86或x64版本