DLL上的嵌入式Xaml页面

时间:2012-10-31 17:47:39

标签: c# xaml windows-8 windows-runtime winrt-xaml

我正在使用新的Metro Design(WinRT)开发一些UI组件,以便将它们提供给第三方公司。 我们在部署控件包时遇到了一些麻烦。 当他们引用我们的控件在新项目上生成的.dll文件时,他们可以访问所有对象并实例化它们,但在编译时,会出现类型错误:

"Payload file '...\bin\Debug\Charts\Line\Line.xaml' does not exist."。 (如果我们提供/ bin .dll)

OR

XamlParseException at Windows.UI.Xaml.Application.LoadComponent(Object component, Uri resourceLocator, ComponentResourceLocation componentResourceLocation)(如果我们使用/ obj文件夹中的.dll)

我们知道“此问题的解决方法是使用.dll部署/提供xaml”文件给我们的客户,但我们真的希望避免显示我们的XAML代码。

提前致谢

NG

1 个答案:

答案 0 :(得分:2)

XAML文件是Windows 8 WinRT / XAML中的松散文件,因此如果要使用将XAML和代码绑定在一起的内置工具,则必须共享XAML文件。

您可能希望阅读Tim Heuer关于构建可部署控件here的文章。他提到了两种共享控件的方法 - 使用VS Extensions SDK将它们安装到Visual Studio中,或者作为NuGet包,您可以共享NuGet包。这样,当您第一次看到共享的组件时,文件将不可见,但它们将包含在项目文件夹中,因此如果有人看得更近 - 他们将看到您的XAML。

您似乎想要避免的替代方法是将dll + xaml文件共享为仅放入项目的文件。您需要将xaml文件放入一个与dll同名的文件夹(没有文件扩展名),以便工具找到它们。只是使用工具的替代方案。

如果查看从商店安装的应用程序,您可以看到随附的所有XAML文件。除了编写大量代码以便以某种方式将XAML嵌入到二进制文件中或用后面的代码替换它之外,目前还没有其他好的选择。