Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NETMVC应用程序的构建期间合并第三方api调用_C#_.net_Asp.net Mvc_Msbuild_Msbuild Task - Fatal编程技术网

C# 如何在ASP.NETMVC应用程序的构建期间合并第三方api调用

C# 如何在ASP.NETMVC应用程序的构建期间合并第三方api调用,c#,.net,asp.net-mvc,msbuild,msbuild-task,C#,.net,Asp.net Mvc,Msbuild,Msbuild Task,好的,这是我的故事 我有一个ASP.NETMVCWeb应用程序,运行良好。但是它需要一些.resx文件(一些已翻译的文化/语言)文件,该文件通过对第三方端点进行API调用来实现。每次我的web项目生成时,都需要将这些.resx文件放入应用程序的相应文件夹。因为这些resx文件可能会在第三方位置更改,所以每次在web应用程序上运行构建时,我都需要获取新文件 项目1:因此,到目前为止,我有一个运行良好的MVC Web应用程序。(主要应用) 项目2:我创建了另一个小型控制台应用程序(只是一个基本的应用

好的,这是我的故事

我有一个ASP.NETMVCWeb应用程序,运行良好。但是它需要一些.resx文件(一些已翻译的文化/语言)文件,该文件通过对第三方端点进行
API调用来实现。每次我的web项目生成时,都需要将这些.resx文件放入应用程序的相应文件夹
。因为这些resx文件可能会在第三方位置更改,所以每次在web应用程序上运行构建时,我都需要获取新文件

项目1:因此,到目前为止,我有一个运行良好的MVC Web应用程序。(主要应用)

项目2:我创建了另一个小型控制台应用程序(只是一个基本的应用程序),它有一个端点,可以调用第三方并获取.resx文件并保存到某个位置

问题1:

为了完成我想要的,我需要有一个单独的项目2,它将进行第三方调用并将文件复制到项目1对应的目录

问题2:

调用第三方的项目2需要是控制台应用程序或mvc应用程序还是什么?我不确定

问题3:

我走的方向对吗。当我的项目1构建时,我想要调用第三方API并将一些文件下载到特定文件夹

问题4:

我是否需要使用MS Build来执行项目2。然后是Project 1.exe。当project 1.exe开始构建时,文件就在那里了

问题5:

我真的需要一个完全独立的项目来调用API来获取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");
    }

}

在project1 csproj文件中,可以以下列方式指定后期生成事件:

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

调用“FullyResolvedPathToYour.exe”“Arg1”“Arg2”
我不知道exe是如何调用的,因此您必须进行调整以满足您的要求。另请注意,您可以使用以下格式的Visual Studio环境变量和系统环境变量:
$(变量)


有关此概念的更多信息,请阅读此处:

在project1 csproj文件中,您可以按以下方式指定后期生成事件:

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

调用“FullyResolvedPathToYour.exe”“Arg1”“Arg2”
我不知道exe是如何调用的,因此您必须进行调整以满足您的要求。另请注意,您可以使用以下格式的Visual Studio环境变量和系统环境变量:
$(变量)


有关此概念的更多信息,请阅读此处:

如果需要,可以使用CURL对端点进行API调用。因此,您不必编写自定义exe文件来下载您的resx。这句话的用法超出了这个答案。我不是这方面的专家。无论如何,您可以在csproj文件生成之前或之后调用它

如果在生成后调用API,请不要使用
。就像拿着锤子去做手术一样。太过分了。改为使用目标

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

如果您需要在构建之前调用此目标,只需将
postertargets
更改为
BeforeTargets

msdn上有大量针对目标的msbuild文档。

如果需要,可以使用CURL对端点进行API调用。因此,您不必编写自定义exe文件来下载您的resx。这句话的用法超出了这个答案。我不是这方面的专家。无论如何,您可以在csproj文件生成之前或之后调用它

如果在生成后调用API,请不要使用
。就像拿着锤子去做手术一样。太过分了。改为使用目标

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

如果您需要在构建之前调用此目标,只需将
postertargets
更改为
BeforeTargets

msdn上有大量针对目标的msbuild文档。

生成后事件是否满足您的需要?我想是的。但老实说,我不知道后构建和所有。我是个新手。但我认为它应该起作用。请帮助我。我会避免在HttpClient方法中硬编码字符串。你可以把这些作为论证来通过。后期构建活动能满足你的需要吗?我想是的。但老实说,我不知道后构建和所有。我是个新手。但我认为它应该起作用。请帮助我。我会避免在HttpClient方法中硬编码字符串。你可以把它们作为参数传入,我想我应该制作一个简单的控制台应用程序,在那里添加api调用,创建exe并调用后期构建。我假设此后期生成将运行此exe并运行“Main”,并且我将能够将resx文件放在要使用的主ASP.Net Web应用程序的正确位置。
调用“C:\Users\lenovo\Documents\Visual Studio 2015\Projects\Console\Console\bin\Debug\Console.exe”
我在后期生成事件中添加了此文件,但没有发生任何事情,当我构建父项目时,我需要bat文件还是其他什么?因为没有人知道Console.exe是什么或者应该如何调用它,所以帮助将受到限制。在构建项目之后,“生成输出”窗口中是否有任何错误代码?我在最初的问题中添加了这些代码。请看一次。另外,当我构建父项目时,也不例外。我认为我应该制作一个简单的控制台应用程序,并在那里添加api调用,创建exe并调用后期构建。我假设此后期生成将运行此exe并运行“Main”,并且我将能够将resx文件放在要使用的主ASP.Net Web应用程序的正确位置。
调用“C:\Users\lenovo\Documents\Visual Studio 2015\Projects\Console\Console\bin\Debug\Console.exe”
我在后期生成事件中添加了此文件,但没有发生任何事情,当我构建父项目时,我需要bat文件还是什么?帮助将是有限的