Я могу построить с помощью dotnet
Я не могу строить с помощью dotnet
[alan<strong i="19">@localhost</strong> Testing]$ dotnet new etoapp -g -sln
The template "Eto App" was created successfully.
[alan<strong i="20">@localhost</strong> Testing]$ dotnet restore
Restoring packages for /home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.csproj...
Restoring packages for /home/alan/Documents/Testing/Testing/Testing.csproj...
Generating MSBuild file /home/alan/Documents/Testing/Testing.Desktop/obj/Testing.Desktop.csproj.nuget.g.props.
Generating MSBuild file /home/alan/Documents/Testing/Testing.Desktop/obj/Testing.Desktop.csproj.nuget.g.targets.
Generating MSBuild file /home/alan/Documents/Testing/Testing/obj/Testing.csproj.nuget.g.props.
Generating MSBuild file /home/alan/Documents/Testing/Testing/obj/Testing.csproj.nuget.g.targets.
Restore completed in 302.81 ms for /home/alan/Documents/Testing/Testing/Testing.csproj.
Restore completed in 296.78 ms for /home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.csproj.
[alan<strong i="21">@localhost</strong> Testing]$ dotnet build
Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Testing -> /home/alan/Documents/Testing/Testing/bin/Debug/netstandard1.6/Testing.dll
Testing.Desktop -> /home/alan/Documents/Testing/Testing.Desktop/bin/Debug/net461/Testing.Desktop.exe
Creating Testing.Desktop.app in target directory
/home/alan/.nuget/packages/eto.platform.mac64/2.4.0/build/MacTemplate.targets(115,3): error : MSB4801: The task factory "CodeTaskFactory" is not supported on the .NET Core version of MSBuild. [/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.csproj]
/home/alan/.nuget/packages/eto.platform.mac64/2.4.0/build/MacTemplate.targets(115,3): error MSB4036: The "_UpdatePList" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "/usr/share/dotnet/sdk/2.0.0" directory. [/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.csproj]
Build FAILED.
/home/alan/.nuget/packages/eto.platform.mac64/2.4.0/build/MacTemplate.targets(115,3): error : MSB4801: The task factory "CodeTaskFactory" is not supported on the .NET Core version of MSBuild. [/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.csproj]
/home/alan/.nuget/packages/eto.platform.mac64/2.4.0/build/MacTemplate.targets(115,3): error MSB4036: The "_UpdatePList" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "/usr/share/dotnet/sdk/2.0.0" directory. [/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.csproj]
0 Warning(s)
2 Error(s)
В частности, эта линия кажется важной.
The task factory "CodeTaskFactory" is not supported on the .NET Core version of MSBuild.
Спасибо, что сообщили о проблеме. Однако вам нужно использовать msbuild
вместо dotnet build
.
Это сработало. Когда я попробовал то же самое для F#
dotnet new etoapp -g -sln -lang F#
тогда я получаю
/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.fsproj(124,5): error : This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ../packages/Eto.Forms.2.4.0/build/Eto.Forms.targets.
Done Building Project "/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.fsproj" (default targets) -- FAILED.
Done Building Project "/home/alan/Documents/Testing/Testing.sln" (default targets) -- FAILED.
Build FAILED.
"/home/alan/Documents/Testing/Testing.sln" (default target) (1) ->
"/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.fsproj" (default target) (3) ->
(EnsureNuGetPackageBuildImports target) ->
/home/alan/Documents/Testing/Testing.Desktop/Testing.Desktop.fsproj(124,5): error : This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ../packages/Eto.Forms.2.4.0/build/Eto.Forms.targets.
0 Warning(s)
1 Error(s)
с мсбилд.
Вероятно, нам следует добавить это в руководство по быстрому запуску, что вы не можете использовать сборку dotnet.
@voronoipotato nuget restore
.
Команда NuGet должна быть установлена с моно-завершением, но если это не так, вы можете установить ее отдельно.
Если вам нужна только поддержка платформы Linux, вы можете использовать nuget Eto.Platform.Gtk
и настроить таргетинг на netcoreapp2.0, и вы сможете создавать с помощью dotnet build
Вот пример моего csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Eto.Platform.Gtk" Version="2.4.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Eto.Desktop\Eto.Desktop.csproj" />
</ItemGroup>
</Project>
Примечание. Это не рекомендуется, так как некоторые функции отсутствуют или не работают на чистом ядре, например WebView
.
@voronoipotato Создайте файл .csproj, а не файл решения. Решение, похоже, содержит проект Mac, и его никогда не удастся собрать в Linux.
Примечание. Это не рекомендуется, так как некоторые функции отсутствуют или не работают на чистом ядре, например WebView. @cra0zy мог бы рассказать вам об этом подробнее.
Нет... все работает на .NET Core, включая WebView.
Решение, похоже, содержит проект Mac, и его никогда не удастся собрать в Linux.
На самом деле, это неправильно. Проекты Mac больше не используют устаревший тип проекта MonoMac и используют csproj в стиле SDK. Пакеты nuget от Eto теперь включают файлы .targets, которые будут создавать пакет .app для вас даже в Windows или Linux. Однако необязательный проект Xamarin.Mac по-прежнему будет создаваться только на Mac.
Вероятно, нам следует добавить это в руководство по быстрому запуску, что вы не можете использовать сборку dotnet.
Сделанный! Я добавил nuget restore
и msbuild
в пример, чтобы указать людям правильное направление.
Ах, я думал, что он создает решения для каждой платформы, но еще не опробовал новые шаблоны.
@voronoipotato это работает для вас сейчас, используя nuget/msbuild?
Я также создал #1080 для портирования файлов .targets для поддержки dotnet build
в будущем.
Я тоже не умею строить тривиальный случай.
mkdir -p eto-test
cd eto-test
dotnet new -i "Eto.Forms.Templates::*"
dotnet new etoapp -lang F#
nuget restore
msbuild
Microsoft (R) Build Engine version 15.4.0.0 ( Wed Nov 29 14:47:19 UTC 2017) for Mono
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 4/13/2018 9:34:26 AM.
Project "[…]/eto-test/eto-test.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "Debug|Any CPU".
Project "[…]/eto-test/eto-test.sln" (1) is building "[…]/eto-test/eto-test/eto-test.fsproj" (2) on node 1 (default targets).
PrepareForBuild:
Creating directory "bin/Debug/net45/".
Creating directory "obj/Debug/net45/".
/usr/share/dotnet/sdk/2.0.3/Sdks/Microsoft.NET.Sdk/build/Microsoft.PackageDependencyResolution.targets(323,5): error : Assets file '[…]/eto-test/eto-test/obj/project.assets.json' not found. Run a NuGet package restore to generate this file. [[…]/eto-test/eto-test/eto-test.fsproj]
Build continuing because "ContinueOnError" on the task "ReportAssetsLogMessages" is set to "ErrorAndContinue".
/usr/share/dotnet/sdk/2.0.3/Sdks/Microsoft.NET.Sdk/build/Microsoft.PackageDependencyResolution.targets(165,5): error : Assets file '[…]/eto-test/eto-test/obj/project.assets.json' not found. Run a NuGet package restore to generate this file. [[…]/eto-test/eto-test/eto-test.fsproj]
Done Building Project "[…]/eto-test/eto-test/eto-test.fsproj" (default targets) -- FAILED.
Project "[…]/eto-test/eto-test.sln" (1) is building "[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj" (3) on node 1 (default targets).
GenerateFSharpTextResources:
Creating directory "obj/Debug/".
PrepareForBuild:
Creating directory "bin/Debug/".
Done Building Project "[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj" (default targets) -- FAILED.
Done Building Project "[…]/eto-test/eto-test.sln" (default targets) -- FAILED.
Build FAILED.
"[…]/eto-test/eto-test.sln" (default target) (1) ->
"[…]/eto-test/eto-test/eto-test.fsproj" (default target) (2) ->
(ReportAssetsLogMessages target) ->
/usr/share/dotnet/sdk/2.0.3/Sdks/Microsoft.NET.Sdk/build/Microsoft.PackageDependencyResolution.targets(323,5): error : Assets file '[…]/eto-test/eto-test/obj/project.assets.json' not found. Run a NuGet package restore to generate this file. [[…]/eto-test/eto-test/eto-test.fsproj]
"[…]/eto-test/eto-test.sln" (default target) (1) ->
"[…]/eto-test/eto-test/eto-test.fsproj" (default target) (2) ->
(RunResolvePackageDependencies target) ->
/usr/share/dotnet/sdk/2.0.3/Sdks/Microsoft.NET.Sdk/build/Microsoft.PackageDependencyResolution.targets(165,5): error : Assets file '[…]/eto-test/eto-test/obj/project.assets.json' not found. Run a NuGet package restore to generate this file. [[…]/eto-test/eto-test/eto-test.fsproj]
0 Warning(s)
2 Error(s)
Time Elapsed 00:00:01.66
Федора 27 x86_64.
dnf repository-packages packages-microsoft-com-prod list installed
возвращает:
aspnetcore-store-2.0.0.x86_64 2.0.0-1 @packages-microsoft-com-prod
aspnetcore-store-2.0.3.x86_64 2.0.3-1 @packages-microsoft-com-prod
dotnet-host.x86_64 2.0.6-1 @packages-microsoft-com-prod
dotnet-hostfxr-2.0.3.x86_64 2.0.3-1 @packages-microsoft-com-prod
dotnet-runtime-2.0.3.x86_64 2.0.3-1 @packages-microsoft-com-prod
dotnet-sdk-2.0.3.x86_64 2.0.3-1 @packages-microsoft-com-prod
dnf repository-packages mono-centos7-stable list installed
возвращает:
fsharp.noarch 4.1.33-0.xamarin.2.epel7 @mono-centos7-stable
libgdiplus0.x86_64 4.2-0.xamarin.2.epel7 @mono-centos7-stable
libmonosgen-2_0-1.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-core.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-data.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-data-oracle.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-data-sqlite.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-devel.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-extras.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-mvc.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-wcf.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-web.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-winforms.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
mono-winfxcore.x86_64 5.10.1.20-0.xamarin.3.epel7 @mono-centos7-stable
msbuild.noarch 1:15.4+xamarinxplat.2017.11.27.11.23-0.xamarin.1.epel7 @mono-centos7-stable
msbuild-libhostfxr.x86_64 2.0.0.2017.07.06.00.01-0.xamarin.1.epel7 @mono-centos7-stable
msbuild-sdkresolver.noarch 1:15.4+xamarinxplat.2017.11.27.11.23-0.xamarin.1.epel7 @mono-centos7-stable
nuget.noarch 2.12+mono-0.xamarin.3.epel7 @mono-centos7-stable
Ошибка уже говорит вам, что не так... «Запустите восстановление пакета NuGet, чтобы сгенерировать этот файл». И нет, это не означает, что нужно запустить nuget restore
, эта команда так не работает. Самое простое решение — запустить dotnet restore
.
Согласно документации по Package Restore , он также запускается nuget restore
. В любом случае, запуск dotnet restore
приводит к частичной ошибке:
[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj(57,3): error MSB4020: The value "" of the "Project" attribute in element <Import> is invalid.
[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj : warning NU1503: Skipping restore for project '[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj'. The project file may be invalid or missing targets required for restore. [[…]/eto-test/eto-test.sln]
[…]
Кажется, это приводит к проблемам при запуске msbuild
:
/usr/lib/mono/fsharp/Microsoft.FSharp.Targets(181,9): error MSB4062: The "FSharpEmbedResXSource" task could not be loaded from the assembly /usr/lib/mono/fsharp/FSharp.Build.dll. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask. [[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj]
Done Building Project "[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj" (default targets) -- FAILED.
Done Building Project "[…]/eto-test/eto-test.sln" (default targets) -- FAILED.
Build FAILED.
"[…]/eto-test/eto-test.sln" (default target) (1) ->
"[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj" (default target) (3) ->
(GenerateFSharpTextResources target) ->
/usr/lib/mono/fsharp/Microsoft.FSharp.Targets(181,9): error MSB4062: The "FSharpEmbedResXSource" task could not be loaded from the assembly /usr/lib/mono/fsharp/FSharp.Build.dll. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask. [[…]/eto-test/eto-test.Desktop/eto-test.Desktop.fsproj]
0 Warning(s)
1 Error(s)
Согласно документации по восстановлению пакетов, это также запускается восстановлением nuget.
nuget restore
нужны аргументы для работы каталога восстановления и файла проекта, вот о чем я говорю, вы не можете запустить его без них (если только он не был случайно изменен).
Похоже, проблема в моем случае в том, что $(FSharpTargetsPath)
пусто. Это неудивительно, поскольку файл .fsproj
при установке этой переменной, похоже, предполагает, что установлена Visual Studio:
<Choose>
<When Condition="'$(VisualStudioVersion)' == '11.0'">
<PropertyGroup Condition=" '$(FSharpTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets') ">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup Condition=" '$(FSharpTargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets') ">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</Otherwise>
</Choose>
да, это может быть хорошей идеей в качестве тестового примера запустить чистую виртуальную машину с ядром dotnet и моно, чтобы увидеть, что вам действительно нужно для ее сборки.
@cra0zy dotnet restore
не поддерживает packages.config, необходимый для шаблонов F#. Однако я только что понял, что шаблоны в nuget не были обновлены до версии 2.4.1 (они находятся в версии 2.4.0), из-за чего я удалил требование packages.config, поскольку инструменты F # теперь поддерживают его должным образом.
Должно быть исправлено с помощью #1104.
Спасибо, что сообщили о проблеме!
Самый полезный комментарий
@voronoipotato Создайте файл .csproj, а не файл решения. Решение, похоже, содержит проект Mac, и его никогда не удастся собрать в Linux.
Нет... все работает на .NET Core, включая WebView.