Как скомпилировать приложение .NET Core для Linux на машине с Windows

Я разрабатываю приложение .NET Core на компьютере с Windows 10 (с обновлением Visual Studio 2015 3 + Microsoft .NET Core 1.0.1 VS 2015 Tooling Preview 2), которое должно быть опубликовано на компьютере с Ubuntu 16. Для этого мне нужно переместить исходный код на конечную машину и скомпилировать его там, чтобы запустить. например Я не могу скомпилировать код в Windows и запустить его в Linux. Вопрос: есть ли способ скомпилировать код на машине win и запустить его на linux?


person amiry jd    schedule 08.01.2017    source источник


Ответы (3)


Используя команду dotnet build, вы можете указать --runtime флаг

-r | --runtime ‹RUNTIME_IDENTIFIER›

Целевая среда выполнения для сборки. Список идентификаторов среды выполнения (RID), которые вы можете использовать, см. На странице Каталог RID.

RID, представляющие конкретные операционные системы, обычно следуют этому шаблону [os].[version]-[arch]

Например, для создания проекта и его зависимостей для среды выполнения Ubuntu 16.04 используйте:

dotnet build --runtime ubuntu.16.04-x64
person Set    schedule 08.01.2017
comment
Спасибо. Но я получаю эту ошибку: Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'. - person amiry jd; 08.01.2017
comment
@Javad_Amiry вам необходимо указать, что ваш проект поддерживает эти среды выполнения. См. stackoverflow.com/a/37590605/2833802 и stackoverflow.com/a/40194003/2833802 SO ответы - person Set; 08.01.2017
comment
Просто чтобы добавить более свежее обновление к этому ответу. Вам нужно будет установить RuntimeIdentifier в файле csproj с тем временем выполнения, которое вы хотите настроить, например: ‹RuntimeIdentifiers› win10-x64; ubuntu.16.04-x64 ‹/RuntimeIdentifiers› - person Jean Roux; 30.05.2018
comment
Когда следует использовать этот флаг времени выполнения? Это общий флаг, который применяется ко всем вариантам использования только для оптимизации сгенерированных двоичных файлов для конкретной платформы? В частности, используется ли он только для создания автономных двоичных файлов или его также можно использовать для создания приложения, которое работает на ядре dotnet SDK / Runtime? - person Kok How Teh; 02.06.2019

Для тех, кто сейчас видит, что это больше не работает, кажется, что после обновления от 10 ноября 2020 года вы должны указать файл проекта сейчас, поскольку ему больше не нравится использовать указанную среду выполнения в решении (.sln).

Здесь была поднята проблема по этому поводу (https://github.com/dotnet/sdk/issues/14281), но, очевидно, сразу решить эту проблему не удастся.

Итак, ранее, где это работало:

dotnet build --runtime ubuntu.xx.xx-x64

Сейчас ему нужно что-то вроде этого:

dotnet build ProjectName.csproj --runtime ubuntu.xx.xx-x64
person Rogod    schedule 15.11.2020

person    schedule
comment
это то же самое, что щелкнуть правой кнопкой мыши по проекту, опубликовать = ›установить фреймворк в Linux и опубликовать его? - person SalmanShariati; 11.07.2020
comment
Для .NET5 используйте --framework net5.0 - person Vinigas; 26.12.2020