.net core Blazor:如何在JS文件压缩/从不同域加载Blazor应用程序之前运行我的命令

.net core Blazor:如何在JS文件压缩/从不同域加载Blazor应用程序之前运行我的命令,.net-core,msbuild,blazor,.net Core,Msbuild,Blazor,TL;DR:在构建/发布(在asp.net core Blazor应用程序中)JS文件压缩期间,是否有一个目标,我可以在csproj中使用该目标在该目标之前运行我的脚本 背景: 我有Blazor前端应用程序,它被加载到不同的web应用程序(不同的域)。所以:主应用程序加载许多其他应用程序,其中一个应用程序是Blazor应用程序(托管在不同的URL) 我所做的:我手动加载\u framework/blazor.webassembly.js,并将autostart属性设置为false,然后手动启动b

TL;DR:在构建/发布(在asp.net core Blazor应用程序中)JS文件压缩期间,是否有一个
目标
,我可以在csproj中使用该目标在该
目标
之前运行我的脚本

背景:
我有Blazor前端应用程序,它被加载到不同的web应用程序(不同的域)。所以:主应用程序加载许多其他应用程序,其中一个应用程序是Blazor应用程序(托管在不同的URL)

我所做的:我手动加载
\u framework/blazor.webassembly.js
,并将
autostart
属性设置为
false
,然后手动启动blazor:

  Blazor.start({
    loadBootResource: (
      type: string,
      name: string,
      defaultUri: string,
      integrity: string
    ) => {
      const newUrl = ...;// here I can make some URL replacements for defaultUri
      // so my `newUrl` points to place where Blazor app is hosted
      return newUrl;
    },
  })
如下所述:

它工作正常,但没有通过
loadbootsource
加载一个文件。它是
blazor.boot.json
。加载此文件的代码位于blazor.webassembly.jsfetch(“\u framework/blazor.boot.json”…):

本期中也描述了该问题

我还提出了一些可能的解决方案:

我决定用
fetch(${someGlobalVariableForSpecificDomainURL}/_framework/blazor.boot.json
)替换
fetch(${someGlobalVariableForSpecificDomainURL}/_framework/blazor.boot.json
)的内容,但也有压缩文件(GZ和BR)。如何在开始压缩之前但在生成JS文件之后运行我的脚本进行替换?是否可能?是否有任何
Target
可以在csproj中使用? 我不想禁用dotnet文件压缩,也不想覆盖压缩文件(由我自己压缩)

我当前的csproj包含如下内容(压缩后启动的脚本太晚了):



感谢您的帮助或任何建议!如果还有其他解决主要问题的方法,那么我将很高兴看到它(
base
标记不起作用;替换
fetch
也不太好).

我没有找到任何适合我的目标。问题中的代码工作正常,但只有通过我自己的压缩。所以我恢复了这一点,并完成了覆盖窗口。fetch以解决主要问题。如果URL包含blazor.boot.json,则我修改URL并将其传递给原始fetch。加载所有文件后,我将还原原始提取。类似于此处建议的代码:

const originalFetch=window.fetch;
window.fetch=函数(requestInfo,选项){
if(requestInfo=='\u framework/blazor.boot.json'){
返回原始蚀刻('https://example.com/myCustomUrl/blazor.boot.json",选择),;
}否则{
//使用默认逻辑
返回originalFetch.apply(这个,参数);
}
};

我没有找到任何适合我的目标。问题中的代码工作正常,但只有通过我自己的压缩。所以我恢复了这一点,并完成了覆盖
窗口的操作。fetch
以解决主要问题。如果URL包含
blazor.boot.json
,则我修改URL并将其传递给原始fetch。加载所有文件后,我还原原始提取。类似于此处建议的代码:

const originalFetch=window.fetch;
window.fetch=函数(requestInfo,选项){
if(requestInfo=='\u framework/blazor.boot.json'){
返回原始蚀刻('https://example.com/myCustomUrl/blazor.boot.json",选择),;
}否则{
//使用默认逻辑
返回originalFetch.apply(这个,参数);
}
};

你找到更好的方法了吗?你找到更好的方法了吗?
  <Target Name="ReplacementDuringBuild" BeforeTargets="Build">
    <Exec WorkingDirectory="$(MyDirWithScripts)" Command="node replace.js --output=$(MSBuildThisFileDirectory)$(OutDir)" />
  </Target>

  <Target Name="ReplacementDuringPublish" AfterTargets="AfterPublish">
    <Exec WorkingDirectory="$(MyDirWithScripts)" Command="node replace.js --output=$(MSBuildThisFileDirectory)$(PublishDir)" />
  </Target>