В моем приложении ядра реакции 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
Использование по умолчанию IIS Express
Конфигурация для запуска отладки
VS Папка с кодами
Использование конфигурации по умолчанию .NET Core Launch (web)
в launch.json
для запуска отладки
Но в этом случае Directory.GetCurrentDirectory()
возвращает другой путь для VS 2017 и VSCode . (Это ожидается, вероятно, из-за контекста).
Исходная папка SPA ClientApp
находится в SolutionFolder/Presentation/
вместе с Startup.cs
, другими необходимыми файлами и папкой Controllers
. Presentation
установлен как проект запуска.
Как определить этот путь относительно, чтобы он не менялся в зависимости от среды IDE, среды или сборки?