GetCurrentDirectory () для исходного пути SPA в файле startup.cs возвращает другой путь для VS2017 и кода VS - PullRequest
0 голосов
/ 13 января 2019

В моем приложении ядра реакции asp.NET есть место в файле startup.cs, где определен путь к каталогу исходного кода реакции.

app.UseSpa(spa =>
{
    var path = Path.Combine(Directory.GetCurrentDirectory(), "ClientApp");
    spa.Options.SourcePath = path;
    if (env.IsDevelopment())
    {
        spa.UseReactDevelopmentServer(npmScript: "start");
    }
 });

И весь файл Startup.cs и Program.cs выглядит следующим образом

Program.cs

public static void Main(string[] args) {
  CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
  .UseStartup < Startup > ();

Startup.cs

public Startup(IConfiguration configuration) {
  Configuration = configuration;
}

public IConfiguration Configuration {
  get;
}

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services) {
  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

  // In production, the React files will be served from this directory
  services.AddSpaStaticFiles(configuration => {
    configuration.RootPath = "ClientApp/build";
  });
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
  if (env.IsDevelopment()) {
    app.UseDeveloperExceptionPage();
  } else {
    app.UseExceptionHandler("/Error");
    app.UseHsts();
  }

  //app.UseHttpsRedirection();
  app.UseStaticFiles();
  app.UseSpaStaticFiles();

  app.UseMvc(routes => {
    routes.MapRoute(
      name: "default",
      template: "{controller}/{action=Index}/{id?}");
  });

  app.UseSpa(spa =>
  {
    var path = Path.Combine(Directory.GetCurrentDirectory(), "ClientApp");
    spa.Options.SourcePath = path;
    if (env.IsDevelopment())
    {
        spa.UseReactDevelopmentServer(npmScript: "start");
    }
  });
 }

VS 2017 Solution

VS 2017 Solution

Использование по умолчанию IIS Express Конфигурация для запуска отладки

VS Code Folder

VS Папка с кодами

Использование конфигурации по умолчанию .NET Core Launch (web) в launch.json для запуска отладки


Но в этом случае Directory.GetCurrentDirectory() возвращает другой путь для VS 2017 и VSCode . (Это ожидается, вероятно, из-за контекста). Исходная папка SPA ClientApp находится в SolutionFolder/Presentation/ вместе с Startup.cs, другими необходимыми файлами и папкой Controllers. Presentation установлен как проект запуска.

Как определить этот путь относительно, чтобы он не менялся в зависимости от среды IDE, среды или сборки?

1 Ответ

0 голосов
/ 16 января 2019

Разобрался с вопросом, наверное. Настройка в качестве запуска проекта в VS2017 устанавливает текущий рабочий каталог также по этому пути. Что отражается в значении CurrentRoothPath или Directory.GetCurrentDirectory().

Но в VSCode с конфигурацией отладки по умолчанию текущий каталог указывает на корень открытой папки (не на какие-либо проекты или дочернюю папку).

Мне пришлось изменить значение cwd в launch.json с "${workspaceFolder}" на "${workspaceFolder}/ReportingTool.Presentation"

Согласно документам:

cwd - текущий рабочий каталог для поиска зависимостей и других файлов

Так что я не совсем уверен, как это повлияет на сборку продукции или другие зависимости. Это решает проблему на данный момент. Надеюсь, кто-нибудь уточнит дальше.

...