好了,这是我的故事。
我有一个ASP.Net MVC应用程序,它工作得很好。但是它需要一些通过制作API Call to a third party end point
而来的.resx文件(一些翻译的文化/语言)文件。需要将这些.resx文件放入应用程序的相应文件夹everytime my web project builds
中。因为这些resx文件可能会在第三方位置更改,所以我每次在web应用程序上运行构建时都需要获取新的文件。
项目1:所以到目前为止,我已经有了一个运行良好的MVC应用程序。(主应用程序)
项目2:我已经创建了另一个小的控制台应用程序(只是一个基本的),它有一个端点,它调用第三方并获取.resx文件并保存到一个位置。
问题1:
为了完成我想要做的事情,我需要有一个单独的Project 2,它将进行第三方调用并将文件复制到Project 1的相应目录中。
问题2:
调用第三方的项目2需要是控制台应用程序还是mvc应用程序等等?我不确定
问题3:
我走的方向对吗。当我的项目1构建时,我想要的就是调用第三方API并将一些文件下载到特定的文件夹。
问题4:
我需要使用MS-Build来执行Project2.exe然后再执行Project1.exe吗?那么当项目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");
}
}
发布于 2018-08-27 00:03:48
在您的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
发布于 2018-08-27 22:41:24
如果需要,您可以使用CURL对端点进行API调用。因此,您不必编写自定义exe文件来下载resx。这个问题的用法超出了这个范围。我不是这方面的专家。无论如何,您可以在构建csproj文件之前调用它。
如果您在构建之后调用API,请不要使用<PostBuildEvent>
。就像拿着锤子去做手术一样。过度杀伤力。请改用Target。
<Target Name="Call your Stuff" AfterTargets="Build">
<Exec Command="FullyResolvedPathToYour.EXE arg1 arg2 etc" WorkingDirectory="..." />
</Target>
如果您需要在构建之前调用此目标,只需将AfterTargets
更改为BeforeTargets
。
https://stackoverflow.com/questions/52027690
复制相似问题