.net-winform多平台编译设置 csproj配置


在JocPlanTaskTools计划任务管理项目中,管理工具采用了多平台设置:同时支持net45、net5.0-windows和net6.0-windows

现在想不同平台编译后的exe文件名做个区分,

配置如下:

XML 全选
<PropertyGroup>
	<OutputType>WinExe</OutputType>
	<TargetFrameworks>net45;net5.0-windows;net6.0-windows;</TargetFrameworks>
	<Nullable>enable</Nullable>
	<UseWindowsForms>true</UseWindowsForms>
	<ApplicationIcon>_logo01.ico</ApplicationIcon>
	<LangVersion>8.0</LangVersion>
	<AssemblyName Condition="'$(TargetFramework)' == 'net45'">JocPlanTaskTools-net45</AssemblyName>
	<AssemblyName Condition="'$(TargetFramework)' == 'net5.0-windows'">JocPlanTaskTools-net5</AssemblyName>
	<AssemblyName Condition="'$(TargetFramework)' == 'net6.0-windows'">JocPlanTaskTools-net6</AssemblyName>
	<Version>1.2022.1106.001</Version>
</PropertyGroup>

编译报错:

.net-winform多平台编译设置

严重性 代码 说明 项目 文件 禁止显示状态

错误 NETSDK1005 资产文件“D:\GZProject\JocPlanTask\JocPlanTaskToolsCore\obj\project.assets.json”没有“net6.0-windows”的目标。确保已运行还原,且“net6.0-windows”已包含在项目的 TargetFrameworks 中。 JocPlanTaskTools C:\Program Files\dotnet\sdk\6.0.300\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets 267

错误 NETSDK1005 资产文件“D:\GZProject\JocPlanTask\JocPlanTaskToolsCore\obj\project.assets.json”没有“net5.0-windows”的目标。确保已运行还原,且“net5.0-windows”已包含在项目的 TargetFrameworks 中。 JocPlanTaskTools C:\Program Files\dotnet\sdk\6.0.300\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets 267

错误 NETSDK1005 资产文件“D:\GZProject\JocPlanTask\JocPlanTaskToolsCore\obj\project.assets.json”没有“net45”的目标。确保已运行还原,且“net45”已包含在项目的 TargetFrameworks 中。 JocPlanTaskTools C:\Program Files\dotnet\sdk\6.0.300\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets 267

查看obj\project.assets.json文件内容如下:

JavaScript 全选
{
  "version": 3,
  "targets": {},
  "libraries": {},
  "projectFileDependencyGroups": {},
  "packageFolders": {
    "C:\\Users\\Garson\\.nuget\\packages\\": {}
  },
  "project": {
    "restore": {
      "projectUniqueName": "D:\\GZProject\\JocPlanTask\\JocPlanTaskToolsCore\\JocPlanTaskTools.csproj",
      "projectPath": "D:\\GZProject\\JocPlanTask\\JocPlanTaskToolsCore\\JocPlanTaskTools.csproj",
      "packagesPath": "C:\\Users\\Garson\\.nuget\\packages\\",
      "outputPath": "D:\\GZProject\\JocPlanTask\\JocPlanTaskToolsCore\\obj\\",
      "projectStyle": "PackageReference",
      "configFilePaths": [
        "C:\\Users\\Garson\\AppData\\Roaming\\NuGet\\NuGet.Config",
        "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
      ],
      "sources": {
        "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
        "D:\\OneDrive\\NugetTest": {},
        "https://api.nuget.org/v3/index.json": {}
      }
    }
  },
  "logs": [
    {
      "code": "NU1105",
      "level": "Error",
      "message": "无法读取“JocPlanTaskTools”的项目信息: 序列包含一个以上的元素"
    }
  ]
}

原因分析

经过大量的尝试,得出一个结论:

PropertyGroup节点中,条件使用  Condition="'$(TargetFramework)' == 'net45'" 这样的,编辑就会报错,

但是如果把 net45 改成一个不存在的,比如net45_0001 这样就不会报错了,很奇怪,具体为什么这样,不知道,得出结论就是这样,

解决

既然不能直接用==,那我们可以用IndexOf这样的条件,

如下:

XML 全选
<PropertyGroup>
	<MyAssemblyName>$(MSBuildProjectName)</MyAssemblyName>
	<MyAssemblyName Condition="$(TargetFramework.IndexOf('.net45')) == 0">$(MSBuildProjectName)-net45</MyAssemblyName>
	<MyAssemblyName Condition="$(TargetFramework.IndexOf('.net5.0-windows')) == 0">$(MSBuildProjectName)-net5</MyAssemblyName>
	<MyAssemblyName Condition="$(TargetFramework.IndexOf('.net6.0-windows')) == 0">$(MSBuildProjectName)-net6</MyAssemblyName>
</PropertyGroup>

<PropertyGroup>
	<AssemblyName>$(MyAssemblyName)</AssemblyName>
</PropertyGroup>

 

csproj文件完整内容如下:

XML 全选
<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<OutputType>WinExe</OutputType>
		<TargetFrameworks>net45;net5.0-windows;net6.0-windows;</TargetFrameworks>
		<Nullable>enable</Nullable>
		<UseWindowsForms>true</UseWindowsForms>
		<ApplicationIcon>_logo01.ico</ApplicationIcon>
		<LangVersion>8.0</LangVersion>
		<Version>1.2022.1106.001</Version>
	</PropertyGroup>

	<PropertyGroup>
		<MyAssemblyName>$(MSBuildProjectName)</MyAssemblyName>
		<MyAssemblyName Condition="$(TargetFramework.IndexOf('.net45')) == 0">$(MSBuildProjectName)-net45</MyAssemblyName>
		<MyAssemblyName Condition="$(TargetFramework.IndexOf('.net5.0-windows')) == 0">$(MSBuildProjectName)-net5</MyAssemblyName>
		<MyAssemblyName Condition="$(TargetFramework.IndexOf('.net6.0-windows')) == 0">$(MSBuildProjectName)-net6</MyAssemblyName>
	</PropertyGroup>

	<PropertyGroup>
		<AssemblyName>$(MyAssemblyName)</AssemblyName>
	</PropertyGroup>
	
	<ItemGroup>
		<Content Include="_logo01.ico" />
	</ItemGroup>

	<ItemGroup>
		<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
	</ItemGroup>

	<ItemGroup>
		<ProjectReference Include="..\JocPlanTaskCore\JocPlanTaskCore.csproj" />
	</ItemGroup>

</Project>

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:C#类型转换,对象转换
下一篇:nuget包配置复制文件到编译目录
评论列表

发表评论

评论内容
昵称:
关联文章

.net-winform平台编译设置 csproj配置
C# 使用Roslyn编译项目 .csproj
.Net Core Razor 预编译,动态编译,混合编译
.net Core项目.csproj配置指南
.Net Core 5.0 Razor 预编译,动态编译,混合编译
C# Roslyn编译csproj项目 使用Roslyn编译整个C#项目
.NET DLL反编译 dnSpy
.NET DLL反编译 JustDecompile
nuget包配置复制文件到编译目录
迁移 dotnet 6 提示必须将目标平台设置为 Windows 平台
【推荐】Razor文件编译 ASP.NET Core
JOC快速开发平台添加了水印设置
Windows下Git账号配置,同一电脑个ssh-key的管理
vue vue-clie环境配置
.NET平台 版本号:TargetFramework
.NET DLL反编译 .Net脱壳利器de4dot
YES-WEB快速开发框架,.NET WEB开发平台,高效的web项目开发框架
使用WtmPlus低代码平台提高生产力
dotnet 将自动代码格式化机器人带入团队 GitLab 平台
SourceGenerator的应用: .Net进程开发库 - Juxtapose

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码