在 .net 核心项目中发布时获取资产文件没有 targetframework 异常
Getting asset file doesn't have targetframework exception while publishing in .net core project
我不明白 csproj 和引用如何一起玩。我创建了一个基本的 .Net Core 应用程序,它在本地构建良好。但是当我尝试发布它时,出现如下异常。
error NETSDK1047: Assets file
'C:\Users\source\repos\AWSLambda7\AWSLambda7\obj\project.assets.json'
doesn't have a target for '.NETCoreApp,Version=v3.1/linux-x64'. Ensure
that restore has run and that you have included 'netcoreapp3.1' in the
TargetFrameworks for your project. You may also need to include
'linux-x64' in your project's RuntimeIdentifiers.
[C:\Users\source\repos\AWSLambda7\AWSLambda7\AWSLambda7.csproj]
下面是代码片段
public class Function
{
public async Task FunctionHandler(SQSEvent evnt, ILambdaContext context)
{
foreach (var message in evnt.Records)
{
await Task.CompletedTask;
}
}
}
csproj 文件如下所示
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<AWSProjectType>Lambda</AWSProjectType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" />
<PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.0.0" />
<PackageReference Include="Amazon.Lambda.SQSEvents" Version="1.1.0" />
</ItemGroup>
</Project>
obj\project.assets.json 文件如下所示
{
"version": 3,
"targets": {
".NETCoreApp,Version=v3.1": {
"Amazon.Lambda.Core/1.1.0": {
"type": "package",
"compile": {
"lib/netstandard2.0/Amazon.Lambda.Core.dll": {}
},
"runtime": {
"lib/netstandard2.0/Amazon.Lambda.Core.dll": {}
}
},
"Amazon.Lambda.Serialization.SystemTextJson/2.0.0": {
"type": "package",
"dependencies": {
"Amazon.Lambda.Core": "1.1.0"
},
"compile": {
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.dll": {}
},
"runtime": {
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.dll": {}
}
},
"Amazon.Lambda.SQSEvents/1.1.0": {
"type": "package",
"compile": {
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.dll": {}
},
"runtime": {
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.dll": {}
}
}
}
},
"libraries": {
"Amazon.Lambda.Core/1.1.0": {
"sha512": "ueGId8b4DEHoVWkHDs3iAJH8IUSAUGu5AqkoI/Syl4RuByzik7lz9IjoImQ==",
"type": "package",
"path": "amazon.lambda.core/1.1.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"amazon.lambda.core.1.1.0.nupkg.sha512",
"amazon.lambda.core.nuspec",
"lib/netstandard1.3/Amazon.Lambda.Core.dll",
"lib/netstandard1.3/Amazon.Lambda.Core.xml",
"lib/netstandard2.0/Amazon.Lambda.Core.dll",
"lib/netstandard2.0/Amazon.Lambda.Core.xml"
]
},
"Amazon.Lambda.Serialization.SystemTextJson/2.0.0": {
"sha512": "En67XZpjBILNrLdb/7HqGtqkPjoRYDjViY4+PEn1CAe53FNStU/vbcVtDvDyvQeUnFgMui3zvMdlsjJIzBPHdQ==",
"type": "package",
"path": "amazon.lambda.serialization.systemtextjson/2.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"amazon.lambda.serialization.systemtextjson.2.0.0.nupkg.sha512",
"amazon.lambda.serialization.systemtextjson.nuspec",
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.dll",
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.xml"
]
},
"Amazon.Lambda.SQSEvents/1.1.0": {
"sha512": "AD6rELASxItdSSR1Vj7X7pEE8OeGIADJkYer9dvHtXP+2Nhp==",
"type": "package",
"path": "amazon.lambda.sqsevents/1.1.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"amazon.lambda.sqsevents.1.1.0.nupkg.sha512",
"amazon.lambda.sqsevents.nuspec",
"lib/netstandard1.3/Amazon.Lambda.SQSEvents.dll",
"lib/netstandard1.3/Amazon.Lambda.SQSEvents.xml",
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.dll",
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.xml"
]
}
},
"projectFileDependencyGroups": {
".NETCoreApp,Version=v3.1": [
"Amazon.Lambda.Core >= 1.1.0",
"Amazon.Lambda.SQSEvents >= 1.1.0",
"Amazon.Lambda.Serialization.SystemTextJson >= 2.0.0"
]
},
"packageFolders": {
"C:\Users\.nuget\packages\": {},
"C:\Program Files\dotnet\sdk\NuGetFallbackFolder": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\Users\source\repos\AWSLambda7\AWSLambda7\AWSLambda7.csproj",
"projectName": "AWSLambda7",
"projectPath": "C:\Users\source\repos\AWSLambda7\AWSLambda7\AWSLambda7.csproj",
"packagesPath": "C:\Users\.nuget\packages\",
"outputPath": "C:\Users\source\repos\AWSLambda7\AWSLambda7\obj\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\Program Files\dotnet\sdk\NuGetFallbackFolder"
],
"configFilePaths": [
"C:\Users\AppData\Roaming\NuGet\NuGet.Config",
"C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"netcoreapp3.1"
],
"sources": {
"C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"netcoreapp3.1": {
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"netcoreapp3.1": {
"dependencies": {
"Amazon.Lambda.Core": {
"target": "Package",
"version": "[1.1.0, )"
},
"Amazon.Lambda.SQSEvents": {
"target": "Package",
"version": "[1.1.0, )"
},
"Amazon.Lambda.Serialization.SystemTextJson": {
"target": "Package",
"version": "[2.0.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\Program Files\dotnet\sdk\3.1.301\RuntimeIdentifierGraph.json"
}
}
}
}
请注意,项目在 Windows 10 机器的 VS-2019 中构建良好。
我看你是直接建工程吧。默认情况下将支持 windows 服务器,AWS lambda 内部将使用 Linux OS。我们需要将目标 OS 构建并打包为 Linux
以下是您需要遵循的一些步骤
确保你添加了一个 Lambda 序列化程序下面是相同的代码
[程序集:LambdaSerializer(类型(DefaultLambdaJsonSerializer))]
打开命令提示符并执行下面的命令,它将构建并在 Aws lambda 就绪包的支持下打包(您必须安装 AWS cli 工具)
dotnet lambda package
如果您没有 AWS CLI 工具,请使用下面的命令
dotnet publish --output "[output folderpath]" --configuration "Release" --framework "netcoreapp3.1" /p:GenerateRuntimeConfigurationFiles=true --运行时linux- x64 -- 自包含 false
我不明白 csproj 和引用如何一起玩。我创建了一个基本的 .Net Core 应用程序,它在本地构建良好。但是当我尝试发布它时,出现如下异常。
error NETSDK1047: Assets file 'C:\Users\source\repos\AWSLambda7\AWSLambda7\obj\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v3.1/linux-x64'. Ensure that restore has run and that you have included 'netcoreapp3.1' in the TargetFrameworks for your project. You may also need to include 'linux-x64' in your project's RuntimeIdentifiers. [C:\Users\source\repos\AWSLambda7\AWSLambda7\AWSLambda7.csproj]
下面是代码片段
public class Function
{
public async Task FunctionHandler(SQSEvent evnt, ILambdaContext context)
{
foreach (var message in evnt.Records)
{
await Task.CompletedTask;
}
}
}
csproj 文件如下所示
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<AWSProjectType>Lambda</AWSProjectType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" />
<PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.0.0" />
<PackageReference Include="Amazon.Lambda.SQSEvents" Version="1.1.0" />
</ItemGroup>
</Project>
obj\project.assets.json 文件如下所示
{
"version": 3,
"targets": {
".NETCoreApp,Version=v3.1": {
"Amazon.Lambda.Core/1.1.0": {
"type": "package",
"compile": {
"lib/netstandard2.0/Amazon.Lambda.Core.dll": {}
},
"runtime": {
"lib/netstandard2.0/Amazon.Lambda.Core.dll": {}
}
},
"Amazon.Lambda.Serialization.SystemTextJson/2.0.0": {
"type": "package",
"dependencies": {
"Amazon.Lambda.Core": "1.1.0"
},
"compile": {
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.dll": {}
},
"runtime": {
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.dll": {}
}
},
"Amazon.Lambda.SQSEvents/1.1.0": {
"type": "package",
"compile": {
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.dll": {}
},
"runtime": {
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.dll": {}
}
}
}
},
"libraries": {
"Amazon.Lambda.Core/1.1.0": {
"sha512": "ueGId8b4DEHoVWkHDs3iAJH8IUSAUGu5AqkoI/Syl4RuByzik7lz9IjoImQ==",
"type": "package",
"path": "amazon.lambda.core/1.1.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"amazon.lambda.core.1.1.0.nupkg.sha512",
"amazon.lambda.core.nuspec",
"lib/netstandard1.3/Amazon.Lambda.Core.dll",
"lib/netstandard1.3/Amazon.Lambda.Core.xml",
"lib/netstandard2.0/Amazon.Lambda.Core.dll",
"lib/netstandard2.0/Amazon.Lambda.Core.xml"
]
},
"Amazon.Lambda.Serialization.SystemTextJson/2.0.0": {
"sha512": "En67XZpjBILNrLdb/7HqGtqkPjoRYDjViY4+PEn1CAe53FNStU/vbcVtDvDyvQeUnFgMui3zvMdlsjJIzBPHdQ==",
"type": "package",
"path": "amazon.lambda.serialization.systemtextjson/2.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"amazon.lambda.serialization.systemtextjson.2.0.0.nupkg.sha512",
"amazon.lambda.serialization.systemtextjson.nuspec",
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.dll",
"lib/netcoreapp3.1/Amazon.Lambda.Serialization.SystemTextJson.xml"
]
},
"Amazon.Lambda.SQSEvents/1.1.0": {
"sha512": "AD6rELASxItdSSR1Vj7X7pEE8OeGIADJkYer9dvHtXP+2Nhp==",
"type": "package",
"path": "amazon.lambda.sqsevents/1.1.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"amazon.lambda.sqsevents.1.1.0.nupkg.sha512",
"amazon.lambda.sqsevents.nuspec",
"lib/netstandard1.3/Amazon.Lambda.SQSEvents.dll",
"lib/netstandard1.3/Amazon.Lambda.SQSEvents.xml",
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.dll",
"lib/netstandard2.0/Amazon.Lambda.SQSEvents.xml"
]
}
},
"projectFileDependencyGroups": {
".NETCoreApp,Version=v3.1": [
"Amazon.Lambda.Core >= 1.1.0",
"Amazon.Lambda.SQSEvents >= 1.1.0",
"Amazon.Lambda.Serialization.SystemTextJson >= 2.0.0"
]
},
"packageFolders": {
"C:\Users\.nuget\packages\": {},
"C:\Program Files\dotnet\sdk\NuGetFallbackFolder": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\Users\source\repos\AWSLambda7\AWSLambda7\AWSLambda7.csproj",
"projectName": "AWSLambda7",
"projectPath": "C:\Users\source\repos\AWSLambda7\AWSLambda7\AWSLambda7.csproj",
"packagesPath": "C:\Users\.nuget\packages\",
"outputPath": "C:\Users\source\repos\AWSLambda7\AWSLambda7\obj\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\Program Files\dotnet\sdk\NuGetFallbackFolder"
],
"configFilePaths": [
"C:\Users\AppData\Roaming\NuGet\NuGet.Config",
"C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"netcoreapp3.1"
],
"sources": {
"C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"netcoreapp3.1": {
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"netcoreapp3.1": {
"dependencies": {
"Amazon.Lambda.Core": {
"target": "Package",
"version": "[1.1.0, )"
},
"Amazon.Lambda.SQSEvents": {
"target": "Package",
"version": "[1.1.0, )"
},
"Amazon.Lambda.Serialization.SystemTextJson": {
"target": "Package",
"version": "[2.0.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\Program Files\dotnet\sdk\3.1.301\RuntimeIdentifierGraph.json"
}
}
}
}
请注意,项目在 Windows 10 机器的 VS-2019 中构建良好。
我看你是直接建工程吧。默认情况下将支持 windows 服务器,AWS lambda 内部将使用 Linux OS。我们需要将目标 OS 构建并打包为 Linux 以下是您需要遵循的一些步骤
确保你添加了一个 Lambda 序列化程序下面是相同的代码 [程序集:LambdaSerializer(类型(DefaultLambdaJsonSerializer))]
打开命令提示符并执行下面的命令,它将构建并在 Aws lambda 就绪包的支持下打包(您必须安装 AWS cli 工具)
dotnet lambda package
如果您没有 AWS CLI 工具,请使用下面的命令
dotnet publish --output "[output folderpath]" --configuration "Release" --framework "netcoreapp3.1" /p:GenerateRuntimeConfigurationFiles=true --运行时linux- x64 -- 自包含 false