我想把一个wpf应用程序的输出类型由windows应用程序改为类库该怎么做,直接在项目属性里改的话报错为 库项目文件无法指定applicationdefinition属性
wpf窗体项目运行之后bin/debug下面只有.exe文件,现在想要生成dll文件供其他第三方引用的实现方法。
1、删除App.xaml文件
2、将项目属性--应用程序--输出类型 改为类库。
下面可以没有,经测试,上面两步就可以实现,下面的内容是其他文章中的内容,备用。
-
- 打开解决方案中的 Properties目录下的 AssemblyInfo.cs文件
- 修改增加以下这个标签:
[assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionaries) ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries) )]
- 然后你就需要在项目增加一个名为 Themes 的目录,在目录里面添加一个名为 Generic.xaml 的ResourceDictionary
- 这样,你就可以把在App.xaml中定义的资源全部放在Generic.xaml中了,系统根据程序集的设置会默认从这个资源目录中去寻找资源
2.-------------------------------------
WPF应用程序工程类型转换-exe与dll相互转换
1. Windows Application 转换成Class Library类型(exe → dll)
新建一个WPF应用程序,在该Project右键Properties,将Output type从Windows Application改成ClassLibrary。
编译不成功,报错如下:
网上搜到一种解决方法是:删掉App.xaml,重新编译就可以成功编译成dll类型了。
但是我还想在需要的时候再从ClassLibrary改成Windows Application。所以先把App.xaml及App.xaml.cs复制了一份作为备份,然后在工程中删除App.xaml(及App.xaml.cs),最终build出了WpfApplication1.dll。
2. Class Library转换成Windows Application类型(dll → exe)
在该Project右键Properties,将Output type从ClassLibrary改成Windows Application。
然后把App.xaml(及App.xaml.cs)再添加回Project。编译出错:
网上搜索这个错误的解决方案,查找到/obj/Debug/App.g.i.cs中没有生成Main,删除掉Obj后,重新编译生成Obj仍然解决不了。
最后搜到正确的解决方案: App.xaml右键属性中,Build Action从“Page”改成“ApplicationDefinition”,重新编译即可,成功生成WpfApplication1.exe。
对比一个正常的WPF应用程序的App.xaml的属性,确实都是Build Action:“ApplicationDefinition”。 因为后来我自己把App.xaml加回工程中,只是新加已存在项,所以加回去后Build Action默认变成了Page。
然后,就想到在Windows Application 转换成Class Library类型时,把App.xaml的Build Action改成Page,那么编译dll应该就不会报错了。一试之下,果然可以;还不用删除App.xaml这么麻烦。
转念一想,提供删除App.xaml来实现从WPF工程转换成类库工程的人,压根就没想过要反过来把类库工程转换成WPF工程吧。毕竟exe和dll都可以作为其他工程的引用,都可以正常使用其中的类等程序集资源。我对WPF工程和类库工程的这种相互转化的需求确实不太常见啊!
3. 总结
exe → dll
- Application Output type:Windows Application 转换成Class Library类型
- App.xaml: Build Action从“ApplicationDefinition”改成“Page”
dll → exe
- Application Output type:Class Library转换成Windows Application类型
- App.xaml: Build Action从“Page”改成“ApplicationDefinition”