近日用c# 的wpf编写了一个读取设备数据的exe程序。在最后如何打包的时候犯了难,网上找了很多文章,但是说的不是很详细,只有关键的代码。对于我这才接触c# 两周的人来说 那就是一脸懵逼。最后还是在网易云课堂上找到了相关视频。在这里我详解的贴一下步骤吧!我用的编辑器版本是Visual Studio 2019
一、首先要在debug模式下跑一遍确保debug文件夹内有文件生成,因为我之前就试过没跑就直接打包了,结果生成的exe文件不知道道输出到哪里去了,找了半天累死个人。
二、点解红框内的按钮 切换文件试图
三、打开后缀.csproj文件 翻到最后面 在最后添加如下代码。
%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)
不用改动直接粘贴就行了
四、打开App.xaml.cs文件,添加以下代码
private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); var executingAssemblyName = executingAssembly.GetName(); var resName = executingAssemblyName.Name + ".resources"; AssemblyName assemblyName = new AssemblyName(args.Name);string path = ""; if (resName == assemblyName.Name) { path = executingAssemblyName.Name + ".g.resources"; ; } else { path = assemblyName.Name + ".dll"; if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false) { path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path); } } using (Stream stream = executingAssembly.GetManifestResourceStream(path)) { if (stream == null) return null; byte[] assemblyRawBytes = new byte[stream.Length]; stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length); return Assembly.Load(assemblyRawBytes); } } protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly; }
五、将试图切换回sln,这时候会看见项目已卸载,右键点击项目选择重新加载项目,这时候在App.xaml.cs文件中可能会有报错的情况,将缺失的using导入即可。
六、右键点击项目选择重新生成
输出以上信息就表示生成成功了 ,这个时候debug目录下的exe文件就可以使用了
七、使用的时候可能会出现 “ windows无法访问指定设备路径或文件,你可能没有权限”的问题 这个时候邮件exe程序选择属性
切换到安全选项卡
点击编辑 再点击添加 最后点击高级
点击立刻查找 在列表内找到everyone 并选择 最后确定。此时就可以打开exe程序了