C# 如何在ASP.NETMVC应用程序的构建期间合并第三方api调用
好的,这是我的故事 我有一个ASP.NETMVCWeb应用程序,运行良好。但是它需要一些.resx文件(一些已翻译的文化/语言)文件,该文件通过对第三方端点进行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:我创建了另一个小型控制台应用程序(只是一个基本的应用
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文件还是什么?帮助将是有限的