2016-02-18 2 views
-1

Я пытаюсь преобразовать этот код C# для работы в MSBuild:Как я могу назвать конструктор, определенный в C# из MSBuild?

var uri = new Uri(s1); 

var result = uri.MakeRelativeUri(new Uri(s2)).ToString(); 

Я не совсем уверен, как вы бы назвали Uri конструктор из MSBuild, хотя. Вот то, что я до сих пор:

<PropertyGroup> 
    <!-- <FirstUri>???</FirstUri> 
     <SecondUri>???</SecondUri> --> 
    <RelativeUri>$(FirstUri.MakeRelativeUri($(SecondUri)))</RelativeUri> 
    <AsString>$(RelativeUri.ToString())</RelativeUri> 
</PropertyGroup> 

Как вы можете видеть, я закомментировал FirstUri и SecondUri фрагменты, потому что я не мог понять, как заставить их работать. Я пробовал new Uri($(FirstString)), но это просто заставило его занять буквальное значение s1 (например, "new Uri(C:\Users)").

Как я могу заставить это работать? Любая помощь будет оценена, спасибо!


редактировать: Ну, похоже, это не представляется возможным из прямого MSBuild. Я принял ответ Марка Арнотта о создании пользовательской задачи MSBuild, хотя я не думаю, что сделаю это сам.

Возможно, если вы работаете на Windows, только для клиентов, вы могли бы сделать что-то вроде этого:

<Exec Command="powershell '(New-Object [System.Uri] ...'" /> 

Я немного колеблющимся, чтобы начать совершенно новый процесс только для создания относительных путей, хотя, так что бит разбойника.

+1

Вы не должны называть людей ленивыми, если хотите получить от них ответ. Вы должны предоставить код, необходимый кому-то, чтобы ответить на вопрос, а не ссылку на код. –

+1

@MiguelAlexandre Извините, я просто старался быть юмористическим. Соответственно, я отредактировал свое сообщение, извинившись за путаницу. –

ответ

1

Я не уверен, какова ваша цель, но если вам действительно нужен MSBuild для запуска кода C#, вам нужно использовать встроенные задачи. См. MSDN's Walkthrough: Creating an Inline Task

В большинстве случаев MSBuild запускает предварительно скомпилированные задачи и утилиты командной строки.

0

Обычно вы могли бы сделать это:

<PropertyGroup> 
    <FirstUri>$([System.Uri]::new($(FirstString)))</FirstUri> 
    <SecondUri>$([System.Uri]::new($(SecondString)))</SecondUri> 
    <RelativeUri>$(FirstUri.MakeRelativeUri($(SecondUri)))</RelativeUri> 
    <AsString>$(RelativeUri.ToString())</AsString> 
</PropertyGroup> 

Однако System.Uri не доступный тип в MSBuild. MSBuild Property Reference содержит список доступных типов, но я нашел, что это не включает в себя все. Я нашел другие типы, такие как System.Version и конструкторы (а не только статические функции).

Смежные вопросы