当有人在osx上构建一个.net核心控制台项目的噩梦时,有人可以帮忙吗。
我正在使用dotnet --version 1.0.1
当我尝试从终端运行以下命令时
dotnet publish --framework netcoreapp1.1 --runtime osx.10.11-x64
我收到以下错误:
\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v1.1/osx.10.11-x64
我已经google了这个,所有文档都提到将运行时添加到project.json,就像这样。
"runtimes": {
"win10-x64": {},
"win8-x64": {},
"osx.10.10-x64": {},
"osx.10.11-x64": {
"#import": [ "osx.10.11", "osx.10.10-x64" ]
},
"osx.10.12-x64": {
"#import": [ "osx.10.12", "osx.10.11-x64" ]
},
"debian.8-x64": {}
},
但我没有一个projects.json只有一个projects.assets.json,这是编译器似乎在寻找的地方。
经过进一步调查
我找到了这个链接 - 似乎不再使用project.json!
https://docs.microsoft.com/en-us/dotnet/articles/core/tools/project-json-to-csproj
这对我来说似乎很疯狂??!??!
无论如何它建议将运行时添加到.csproj
我做了什么
PropertyGroup>
<RuntimeIdentifiers>win7-x64;osx.10-11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
</PropertyGroup>
我仍然得到同样的错误。
所以我有几个问题。
为什么编译器会查看projects.assets.json? 我已经尝试将运行时添加到此文件但仍然没有看到它。任何想法为什么?
为什么编译器没有查看到projects.json或csproj文件,网上的其他人似乎都在说它应该看?
如何更改编译器的外观?
感觉我错过了一些简单的东西。
顺便说一句,如果我只是使用dotnet {projectname}从我的控制台运行项目,它运行得很好(在我的mac上),所以构建等没有问题。
提前致谢
更新---
进一步了解这一点。似乎我需要在我的project.assets.json文件
中有这个 "runtimes": {
"osx.10-11-x64": {
"#import": []
},
"ubuntu.16.04-x64": {
"#import": []
},
"win7-x64": {
"#import": []
}
}
注意osx运行时是 osx.10-11-x64 not osx.10.11-x64。这个错字似乎在网上无处不在。也许它已经改变了。
所以它现在编译,我得到一个发布文件夹。
但是现在尝试运行此操作会出现以下错误
A fatal error was encountered. The library 'libhostpolicy.dylib' required to execute the application was not found in 'xxx/xxx'.
用Google搜索过,并没有任何建议或理由与我的情况相符。我已经完成了一个dotnet恢复,构建和发布正确的运行时等。而且我的部署类型不是'平台',这似乎是此错误的另一个原因。
更新2 !!!!搞定了 - 差不多!!!
因为某种原因,runconfig.json文件为空
需要添加此
{
"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "1.1.0"
}
}
}
所以 - 下一个技巧是找出为什么编译器没有自动完成这个!!
答案 0 :(得分:3)
TL; DR这很好用:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
<RuntimeIdentifiers>win7-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
</PropertyGroup>
</Project>
通过以下方式发表:
testapp$ dotnet restore
testapp$ dotnet publish -r osx.10.11-x64
testapp$ ./bin/Debug/netcoreapp1.1/osx.10.11-x64/publish/testapp
Hello World!
要发布自包含,您需要三件事:
project.assets.json
文件的适当引用。这是通过以下任一方式完成
RuntimeIdentifier
(单数)属性。这会将项目固定/修复到一个运行时,然后始终用于构建和运行。也发表。RuntimeIdentifiers
(复数)属性指定多个RID,但不要求每个构建/发布都是特定于运行时的,允许您通过{{1}指定要发布的那个} argument。-r
在恢复期间指定运行时。 2.必须在发布期间指定已恢复为的RuntimeIdentifier,方法是使用dotnet restore -r osx.10.11-x64
或在项目文件中指定dotnet publish -r osx.10.11-x64
(单数)
RuntimeIdentifier