【问题标题】:Update resource before multi target Visual Studio .csproj build在多目标 Visual Studio .csproj 构建之前更新资源
【发布时间】:2019-06-17 23:17:23
【问题描述】:

我有一个包含多个目标的.csproj 文件。开头是这样的:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net35;net40;net45;netcoreapp2.0;netstandard2.0</TargetFrameworks>
      ...

这是一个使用 Selenium 的 C# 项目,需要使用 NPM 自动更新 javascript 文件。每个此类 javascript 文件都应标记为 Embedded Resource

我在构建之前尝试了几种方法来运行 NPM。我尝试编写一个在构建之前运行的批处理文件,我尝试安装 Nuget 扩展来更新 NPM,甚至尝试添加一个更新文件的预构建事件。

问题是,它发生在每个目标上,而我只需要在构建开始之前发生一次。

我搜索了 Microsoft 提供的所有相关 MSBuild 文档以寻找解决方案,但徒劳无功。

目前我像这样更新脚本:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="cd $(ProjectDir)Properties\NodeResources&#xD;&#xA;call npm update &amp;&amp; copy node_modules\mycompany\firstpackage\dist ..\Resources &amp;&amp; copy node_modules\mycompany\secondpackage\dist ..\Resources" />
</Target>

<ItemGroup>
  <None Remove="Properties\Resources\script1.js" />
  <None Remove="Properties\Resources\script2.js" />
</ItemGroup>

<ItemGroup>
  <EmbeddedResource Include="Properties\Resources\script1.js" />
  <EmbeddedResource Include="Properties\Resources\script2.js" />
</ItemGroup>

有人知道怎么做吗?

【问题讨论】:

    标签: c# npm msbuild pre-build-event


    【解决方案1】:

    您需要了解构建多框架的工作原理。 它不是采用一个项目,并将其构建到多个框架,而是根据框架的数量启动一些进程

    所以,进程之间没有办法联系。

    但是,我建议你创建一个独立的csproj 文件(它实际上是一个带有msbuild 配置的project 文件),没有真正的项目,在他里面,覆盖 build使用您的 npm 命令和用于构建解决方案的命令来定位目标。

    另一种选择是保存msbuild property或**环境变量`或临时文件等,并在第一次执行命令后更新它们的状态,并检查命令之前的状态。对此有一个未回答的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-24
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 2017-12-05
      • 2014-03-08
      • 1970-01-01
      相关资源
      最近更新 更多