Как включить сторонний вызов API во время сборки в ASP.Net MVC Application - PullRequest
0 голосов
/ 26 августа 2018

Хорошо, вот моя история.

У меня есть веб-приложение ASP.Net MVC , которое работает нормально.Но для этого нужен файл .resx (с переводом на другой язык / язык), который создается с помощью API Call to a third party end point.Эти .resx файлы должны быть занесены в соответствующую папку приложения everytime my web project builds.Поскольку эти файлы resx могут изменяться в стороннем расположении, поэтому мне нужно получать свежий файл каждый раз, когда я запускаю сборку в своем веб-приложении.

Проект 1: Так что до сих пор у меня есть веб-приложение MVC, которое прекрасно работает.(Основное приложение)

Проект 2: Я создал еще одно небольшое консольное приложение (только базовое), которое имеет одну конечную точку, которая выполняет вызов третьей стороне и получает файл .resx исохраняет в местоположение.

Вопрос 1:

Чтобы выполнить то, что я хочу, мне нужно иметь отдельный Проект 2, который будет вызывать сторонний вызови скопируйте файл в соответствующий каталог проекта 1.

Вопрос 2:

Проект 2, который вызывает стороннюю программу, должен быть консольным приложением или приложением MVC или как?Я не уверен

Вопрос 3:

Я иду в правильном направлении.Все, что мне нужно, когда мой проект 1 собирается, я хочу вызвать сторонний API и загрузить некоторые файлы в определенную папку.

Вопрос 4:

Нужно ли играть с MS-Build для запуска Project 2. exe, а затем Project 1.exe.чтобы были файлы, когда проект 1.exe начинает собираться?

Вопрос 5:

Действительно ли мне нужен отдельный проект, чтобы API CALL мог получить файл resx?

Пожалуйста, помогите мне.

Код проекта 2:

     class Program
{
    static void Main(string[] args)
    {
        Task.Run(() => CallHttp());
        System.Console.ReadLine();
    }
    // Simple async function returning a string...
    static public async void CallHttp()
    {
        var client = new HttpClient();
        client.BaseAddress = new Uri("https://api.crowdin.com/");
        HttpResponseMessage response = await client.GetAsync("api/project/refele/download/all.zip?key=f23e2c91833c0de737");
        using (Stream stream = await response.Content.ReadAsStreamAsync())
        using (FileStream fs = new FileStream(@".\..\..\alpha\test.zip", FileMode.Create))
            await stream.CopyToAsync(fs);
        System.IO.Compression.ZipFile.ExtractToDirectory(@".\..\..\alpha\test.zip", @".\..\..\beta");
    }

}

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вы можете делать вызовы API к конечной точке, используя CURL, если хотите.Таким образом, вам не нужно писать собственный exe-файл для загрузки вашего resx.Использование этого выходит за рамки этого ответа.Я не эксперт в этом.В любом случае, вы можете вызвать его либо до того, как вы соберете файл csproj.

Если вы вызываете API после сборки, не используйте <PostBuildEvent>.Это как молоток для операции.Overkill.Вместо этого используйте Target.

<Target Name="Call your Stuff" AfterTargets="Build">
    <Exec Command="FullyResolvedPathToYour.EXE arg1 arg2 etc" WorkingDirectory="..." />
</Target>

Если вам нужно вызвать эту цель перед сборкой, просто измените AfterTargets на BeforeTargets Существует множество документации по msbuild для msdn для Targets.

0 голосов
/ 26 августа 2018

В вашем файле project1 csproj вы можете указать событие после сборки следующим образом:

<PropertyGroup>
  <PostBuildEvent>
    Call "FullyResolvedPathToYour.exe" "Arg1" "Arg2"
  </PostBuildEvent>
</PropertyGroup>

Я не знаю, как называется ваш exe-файл, так что вам придется настроить его для соответствия вашемутребования.Также обратите внимание, что у вас есть переменные среды Visual Studio и системные переменные среды, доступные вам в этом формате: $(Variable)

Для получения дополнительной информации об этой концепции вы можете прочитать здесь: https://docs.microsoft.com/en-us/visualstudio/ide/how-to-specify-build-events-csharp?view=vs-2017

...