Страницы

Поиск по вопросам

Показаны сообщения с ярлыком msbuild. Показать все сообщения
Показаны сообщения с ярлыком msbuild. Показать все сообщения

воскресенье, 29 марта 2020 г.

Как переконвертировать .NET Core проект в .Net Framework на линуксе или онлайн?

#c_sharp #net #net_core #msbuild


Сейчас пишу тестовое задание на .Net Core (.Net Standard 2.0) на линуксе (Mint 19.1).
Но проверяющий наверняка будет смотреть мое решение на Windows в Visual Studio без
установленного .Net Core SDK. Устанавливать второй системой Windows долго и муторно.
Windows в виртуалке мой ноутбук не потянет (4 гигабайта ОЗУ).

Потому задаюсь вопросом, есть ли на linux какой-нибудь конвертор проекта с .Net Core
на встроенный в Windows 10 .Net Framework 4.6.1? Или может есть онлайн-сервис по пересборке
.Net проектов на разные версии .Net Framework и .Net Core?
    


Ответы

Ответ 1



переконвертировать .NET Core проект в .Net Framework на линуксе Смотря, что Вы хотите сконвертировать. Если Вы не выходите за рамки .NET Standard, то проблем быть не должно. Но, если речь идёт о других типах проектов (тот же ASP.NET), то здесь всё гораздо сложнее. Всё-таки .NET Framework это про Windows. проверяющий наверняка будет смотреть мое решение на Windows в Visual Studio без установленного .Net Core SDK Зачем пользователю приложения для работы с ним Visual Studio и пр.? Сделайте нормальный инсталлятор в котором будет упакована уже собранная рабочая версия с нужными зависимостями и киньте ему с инструкцией как установить проект.

Ответ 2



.NET Framework 4.6.1 поддерживает .Net Standard 2.0 главное не использовать библиотеки строго под .net Core вот ссылка на таблицу совместимости

пятница, 24 января 2020 г.

Code Contracts и TeamCity

#c_sharp #непрерывная_интеграция #msbuild #teamcity


Коллеги, добрый день.

Настраиваю TeamCity 10 для сборки ASP.NET проекта созданного в VS 2015. 
В проекте, кроме всего прочего, используется библиотека CodeContracts. На сборочном
сервере VisualStudio не установлено. Насколько я понимаю, в этом случае TeamCity использует
установленный на машине msbuild. В результате, при сборке на сервере рерайтинг контрактов
не происходит.

Нашел несколько рекомендаций в интернете. Делал следующее:


Скачал с сайта visualstudiogallery и установил библиотеку CodeContracts на сервере.
В файле проекта прописал дополнительный импорт



  C:\Program
Files (x86)\Microsoft\Contracts\




Не помогло. Ничего не рерайтилось.




Установил библиотеку контрактов как nuget пакет в проект (ссылка). Пакет официальный
от Microsoft. Все тулзы для рерайта лежат внутри этого пакета. В файле проекта добавил
похожий импорт, однако ссылающийся на .target файлы внутри данного nuget пакета. 



  $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\packages\DotNet.Contracts.1.10.20606.1\'))`




Аналогично - не помогло. 

Интересная деталь - в куске конфига в пункте 2 переменная CodeContractsInstallDir
"указывает" на папку вышеописанного nuget пакета. Логично предположить, что операции
с контрактами будут вестись с помощью тулзов из этой папки. Однако при сборке студией
на своей машине в логах я вижу использование тулзов контрактной библиотеки из стандартного
расположения "C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe". Как это
происходит - тоже не совсем понятно...

Возможно кто-то сталкивался с данной проблемой и может подсказать решение и поделится
опытом?
    


Ответы

Ответ 1



В результате никакие частичные решения не помогли. Пришлось установить 2015 студию со всеми либами и рантаймом на сборочный сервер. После этого все подхватывалось и работало корректно. Кстати в следующем проекте от CodeContracts отказался, слишком мало бенефитов для меня...

Копировать проект в папку с номером версии проекта

#c_sharp #visual_studio_2015 #msbuild


Хочется использовать версионность приложения как нынче у браузеров - в подпапках
лежат целиком старые и новые версии и какую запускать решает лишь простой лаунчер:



Вопрос - можно ли в проекте на событиях билда(до сборки, после сборки, не важно по
идее) как то указать копирование не в конкретную подпапку, а в ту, которая соответствует
текущей версии проекта?
Интересуют реализации как без сторонних утилит, так и с ними, если других вариантов нет.
    


Ответы

Ответ 1



Удалось найти решение на SO. Выгружаем проект лаунчера и пишем в него: $(PostBuildEventDependsOn); PostBuildMacros; md "$(TargetDir)\@(VersionNumber)" xcopy /y /r /e "$(ProjectDir)\..\Core\bin\$(ConfigurationName)" "$(TargetDir)\@(VersionNumber)" Насколько понимаю, решение получилось немного сборку, ведь версия берется от самого лаунчера. Для меня это не проблема, т.к. использую одну версию на всё решение.

суббота, 21 декабря 2019 г.

Unit name в Delphi

#delphi #msbuild


При создании проекта в Delphi 10.1 Berlin возникает ошибка "Cannot resolve unit name...".
Подчёркивает красным следующие uses: Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
и TForm. Все пакеты в Install Packages добавлены

Первые 10 строк модуля:

unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
TForm1 = class(TForm)




Ошибка компилятора:


  Checking project dependencies...
  Compiling Project1.dproj (Debug, Win32)
  
  [Error Error] Invalid PLATFORM variable "MCD". PLATFORM must be one of the following:
"Win32", "Win64", "Android", "iOSSimulator", "iOSDevice32" "iOSDevice64", or "OSX32".
If PLATFORM is defined by your system's environment, it must be overridden in the RAD
Studio IDE or passed explicitly on the command line to MSBuild; e.g., /p:Platform=Win32.
  
  Failed
  Elapsed time: 00:00:00.0

    


Ответы

Ответ 1



Компиляция проекта производится при помощи утилиты MSBuild. Эта утилита использует переменную PLATFORM для определения целевой платформы компиляции. Возможные значения этой переменной для сборки Delphi проекта "Win32", "Win64", "Android", "iOSSimulator", "iOSDevice32" "iOSDevice64", "OSX32". Значение этой переменной можно задать в IDE (Tools - Options - Environment options). Если оно не задано в IDE, то эта переменная ищется в переменных среды. Если не найдена, то подставляется, собственно, целевая платформа компиляции. У Вас эта переменная нашлась в системных. И ее значение (MCD) оказалось невалидным для сборки Delphi проекта. Варианты решения проблемы: Переопределить ее в IDE Удалить из системных переменных

пятница, 12 июля 2019 г.

Ошибка msbuild в compact framework

Есть проект C# библиотеки VS2012. Настроили nant для построения для разных framwork-ов, но при Compact возникает ошибка:
[msbuild] C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.Common.targets(23,9): error : This project requires .NET Compact Framework v3.5, which is not installed on this machine. [C:\project_name\trunk\project_path\ProjectName.csproj]
Предварительно в проект добавил:
...
Ссылки на библиотеки тоже подправил:
... $(ProgramFiles)\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\System.dll
Причем, в решении уже есть проект, который также для compact строится, успешно, от которого зависит этот новый проект. В чем может быть ошибка?


Ответ

Надо было подкорректировать конфигурацию построения проекта для Compact
AnyCPU true bin\CompactFramework %28Debug%29\ DEBUG;COMPACT;SAMPLE_CONSTANT; full AllRules.ruleset true PocketPC 4118C335-430C-497f-BE48-11C3316B135E 5.1 ProjectDirSuffix v3.5 Windows Mobile 5.0 Pocket PC SDK true true
И обернуть AssemblyFileVersion в Properties\AssemblyInfo.cs: #if !COMPACT [assembly: AssemblyFileVersion("1.0.0.0")] #endif

понедельник, 18 марта 2019 г.

Code Contracts и TeamCity

Коллеги, добрый день.
Настраиваю TeamCity 10 для сборки ASP.NET проекта созданного в VS 2015. В проекте, кроме всего прочего, используется библиотека CodeContracts. На сборочном сервере VisualStudio не установлено. Насколько я понимаю, в этом случае TeamCity использует установленный на машине msbuild. В результате, при сборке на сервере рерайтинг контрактов не происходит.
Нашел несколько рекомендаций в интернете. Делал следующее:
Скачал с сайта visualstudiogallery и установил библиотеку CodeContracts на сервере. В файле проекта прописал дополнительный импорт
C:\Program Files (x86)\Microsoft\Contracts\
Не помогло. Ничего не рерайтилось.

Установил библиотеку контрактов как nuget пакет в проект (ссылка). Пакет официальный от Microsoft. Все тулзы для рерайта лежат внутри этого пакета. В файле проекта добавил похожий импорт, однако ссылающийся на .target файлы внутри данного nuget пакета.
$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\packages\DotNet.Contracts.1.10.20606.1\'))`
Аналогично - не помогло.
Интересная деталь - в куске конфига в пункте 2 переменная CodeContractsInstallDir "указывает" на папку вышеописанного nuget пакета. Логично предположить, что операции с контрактами будут вестись с помощью тулзов из этой папки. Однако при сборке студией на своей машине в логах я вижу использование тулзов контрактной библиотеки из стандартного расположения "C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe". Как это происходит - тоже не совсем понятно...
Возможно кто-то сталкивался с данной проблемой и может подсказать решение и поделится опытом?


Ответ

В результате никакие частичные решения не помогли. Пришлось установить 2015 студию со всеми либами и рантаймом на сборочный сервер. После этого все подхватывалось и работало корректно.
Кстати в следующем проекте от CodeContracts отказался, слишком мало бенефитов для меня...

Копировать проект в папку с номером версии проекта

Хочется использовать версионность приложения как нынче у браузеров - в подпапках лежат целиком старые и новые версии и какую запускать решает лишь простой лаунчер:

Вопрос - можно ли в проекте на событиях билда(до сборки, после сборки, не важно по идее) как то указать копирование не в конкретную подпапку, а в ту, которая соответствует текущей версии проекта? Интересуют реализации как без сторонних утилит, так и с ними, если других вариантов нет.


Ответ

Удалось найти решение на SO
Выгружаем проект лаунчера и пишем в него:
$(PostBuildEventDependsOn); PostBuildMacros; md "$(TargetDir)\@(VersionNumber)" xcopy /y /r /e "$(ProjectDir)\..\Core\bin\$(ConfigurationName)" "$(TargetDir)\@(VersionNumber)"
Насколько понимаю, решение получилось немного сборку, ведь версия берется от самого лаунчера. Для меня это не проблема, т.к. использую одну версию на всё решение.