近日用c# 的wpf编写了一个读取设备数据的exe程序。在最后如何打包的时候犯了难,网上找了很多文章,但是说的不是很详细,只有关键的代码。对于我这才接触c# 两周的人来说 那就是一脸懵逼。最后还是在网易云课堂上找到了相关视频。在这里我详解的贴一下步骤吧!我用的编辑器版本是Visual Studio 2019

一、首先要在debug模式下跑一遍确保debug文件夹内有文件生成,因为我之前就试过没跑就直接打包了,结果生成的exe文件不知道道输出到哪里去了,找了半天累死个人。

二、点解红框内的按钮 切换文件试图

 

三、打开后缀.csproj文件 翻到最后面 在最后添加如下代码。

<Target Name="AfterResolveReferences">
  <ItemGroup>
    <EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
      <LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
    </EmbeddedResource>
  </ItemGroup>
</Target>

不用改动直接粘贴就行了

四、打开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程序了

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐