我制作了一个使用的WPF程序SQLite
。而通过使用Visual Studio 2012,它同时生成Debug
和Release
版本的exe文件。当我进入Debug
或Release
目录并运行我的exe文件时,例如MultiStart.exe
,它可以正常运行。
但是,如果我将其复制MultiStart.exe
到我的桌面上并尝试运行它,它将失败。通过多次试验,我发现我还需要复制的文件MultiStart.exe.config
,并System.Data.SQLite.dll
在我的桌面。然后它可以立即运行。但为什么?我们是否有更好的解决方案,这样我就可以在没有附加文件的情况下运行它?谢谢!
为什么没有Visual Studio,我的WPF程序无法运行?
问题标题不是很准确,因为它与Visual Studio无关。MultiStart.exe
取决于配置(MultiStart.exe.config
)以及其他程序集(System.Data.SQLite.dll
)。没有这些依赖关系,应用程序将无法运行(因为.NET是这样工作的)。
WPF不一定需要运行配置文件,因此问题是应用程序所需的配置文件中包含什么。可能可以将此配置信息移入代码(例如,连接字符串)并删除app.config,但随后这些值将在应用程序中进行硬编码。
就依赖程序集而言,可以将它们作为资源嵌入,然后使用AppDomain.AssemblyResolve事件从资源中读取该程序集(而不是部署它们)(请参阅将程序集嵌入另一个程序集内)。
代替将程序集作为资源嵌入的另一种方法是将它们合并为一个程序集。ILMerge是合并程序集的流行选择,但我读到它可能与WPF程序集有关(不确定是否适用于您)。有关将程序集与WPF合并的其他一些想法,请参见使用wpf将dll合并到单个.exe中。
请注意,设置PATH变量不起作用,因为.NET不会使用PATH来解析程序集-有关详细信息,请参见运行时如何定位程序集。
另一种选择MultiStart.exe
是使用链接到相应目录的桌面快捷方式,而不是将其复制到桌面。也许那是一个更简单的解决方案
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句