gpt4 book ai didi

c# - 在多目标 Visual Studio .csproj 构建之前更新资源

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:36 25 4
gpt4 key购买 nike

我有一个包含多个目标的 .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>

有人知道如何做到这一点吗?

最佳答案

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

因此,进程之间无法联系。

但是,我建议你创建一个独立的 csproj 文件(它实际上是一个带有 msbuild 配置的 project 文件),没有真正的项目,并在他的内部,用你的 npm 命令覆盖 build 目标,以及构建解决方案的命令。

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

关于c# - 在多目标 Visual Studio .csproj 构建之前更新资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54342948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com