Microsoft Build Engine,也称为MSBuild,是托管代码的构建平台,是.NET Framework的一部分。
msbuild 参考程序集在 Visual Studio 中使用多个 .csproj 构建解决方案时解析顺序
我有一个包含多个项目的解决方案,这些项目安装了版本不同的nuget包。看看重建解决方案时,复制到输出目录的 dll 版本...
如何在构建上运行 TextTemplatedFileGenerator (VS 2017)
我发现之前有人问过这个问题,但我遇到的所有答案都特定于早期版本的 Visual Studio。似乎主要是VS2015及更早版本。 大多数
从 Visual Studio 运行时,MSBuild 会被赋予 $(SolutionDir) 宏/属性。 从 Azure DevOps 运行时,此属性不存在(理所当然)。 Azure DevOps 有 Build.SourceBranch
MSBuild“GenerateFakes”错误 MSB4127、MSB4060
使用 Visual Studio 2013 构建时,GenerateFakes 成功,它使用相同目标文件的相同路径。 当通过 MSBuild 12.0(与 Visual Studio 2013 附带的版本相同)构建时,我...
一个 .targets 文件,它将在每个发布版本上增加版本号
原始问题 我有一个 Directory.Build.targets 文件,在使用发布配置构建时会增加项目版本的内部版本号。即产品版本为1.0.0.0,当...
MSB4067 元素 <WriteLinesToFile> 下面的元素 <Target> 无法识别
我有一个 Directory.Build.targets 文件,在使用发布配置构建时会增加项目版本的构建号。即,产品版本为 1.0.0.0,在 Release 中构建时...
源生成器获取引用项目路径 - 从 IncrementalValueProvider 检索有用的值<string>
我正在发现源生成器的概念。 为了根据目标/
自定义 MSBuild 任务 .NET 6.0 使用 dotnet 运行,但不在 VS 中运行
我有一个简单的项目,其中有一个自定义 MSBuild 任务。 此任务将使用 dotnet msbuild 运行,但在 VS2022 中失败。 除了有关架构的一些问题之外,我在网上没有找到任何内容
到目前为止我尝试过的: 我有以下 .nuspec 文件,定义了我的包(为了更好的可读性而进行了简化): 到目前为止我尝试过的: 我有以下 .nuspec 文件,定义了我的包(为了更好的可读性而进行了简化): <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> . . . <dependencies/> <contentFiles> <files include="any\any\config\*.*" buildAction="None" copyToOutput="true" flatten="false"/> </contentFiles> </metadata> <files> <file src="bin\Assembly.dll" target="lib\net461" /> <file src="bin\Assembly.pdb" target="lib\net461" /> <file src="Config\cf.xml" target="contentFiles\any\any\config"/> <file src="Config\cf.txt" target="contentFiles\any\any\config"/> </files> </package> 如您所见,它包含一个已编译的程序集及其调试符号文件以及子目录中的两个内容文件。 这会产生以下编译输出,其中 Assembly.dll 被提取到输出目录以及 config 子目录(其中包含两个 cf.* 文件): 问题: 我想要做的是将子目录 config 在目录树中向上移动一步,因此它位于输出目录的 next - 基本上维护 .nuspec 文件中文件输入的结构(假设 bin 是我的 .csproj 的输出目录): 如何告诉 NuGet 包我想要将 contentFiles 提取到的确切位置? 您可以通过创建一个 MSBuild 目标来实现此目的,该目标将您的 config 文件夹移动到项目构建输出之上一级。 将包含以下内容的 .targets 文件添加到 NuGet 的 build\net461 文件夹中: <?xml version="1.0" encoding="utf-8"?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- Sets up items for target MoveConfigFiles, so that they can be used as Inputs and Outputs. --> <Target Name="PrepareMoveConfigFiles" AfterTargets="Build"> <!-- ItemGroup wrapped in Target to delay evaluation of contained Items --> <ItemGroup> <!-- Contains source locations of files to be moved --> <ConfigSourceFiles Include="$(OutputPath)\config\**\*.*" /> <!-- Contains target locations of files to be moved --> <ConfigTargetFiles Include="@(ConfigSourceFiles->'%(FullPath)'->Replace('\config\', '\..\config\'))" /> </ItemGroup> </Target> <!-- Moves files from $(OutputPath)\config to $(OutputPath)\..\config, then deletes $(OutputPath)\config. --> <Target Name="MoveConfigFiles" AfterTargets="PrepareMoveConfigFiles" Inputs="@(ConfigSourceFiles)" Outputs="@(ConfigTargetFiles)"> <Move SourceFiles="@(ConfigSourceFiles)" DestinationFiles="@(ConfigTargetFiles)" /> <RemoveDir Directories="$(OutputPath)\config" /> </Target> </Project> 目标 PrepareMoveConfigFiles 在 Build 目标之后执行(这保证 NuGet 的内容存在于构建输出中),并设置用作下一个 Inputs 目标的 Outputs 和 MoveConfigFiles 的项目。 (这些项目设置在此目标内,以确保在 Build 目标完成后对它们进行评估。如果将项目定义放置在 Project 级别以下,则它们将更早进行评估,因此可能为空,因为文件content 文件夹尚未部署。) ConfigSourceFiles项仅包含源文件,ConfigTargetFiles采用所有ConfigSourceFiles的路径,并将\config\替换为\..\config\,从而到达所需的目标位置。 MoveConfigFiles目标然后使用Move和RemoveDir任务来完成文件的移动和原始config文件夹的删除。 这是一个奇怪的问题... 您需要对 nuspec 文件执行多项操作; 主要是“nuget 包”。 您的 nuspec 行: <file src="bin\Assembly.dll" target="lib\net461" /> <file src="bin\Assembly.pdb" target="lib\net461" /> 我不明白Assembly.pdb如何分发它,但这并不重要。 这行代码的目标是在您的项目中分发 dll。 当您编译解决方案时(在解决方案目录中),它会在同一根应用程序目录中搜索此 dll,或者检查是否在系统上注册(主要是 gac)。 另一方面,其他类型的行是 nuget 中的“内容” <file src="Config\cf.xml" target="contentFiles\any\any\config"/> <file src="Config\cf.txt" target="contentFiles\any\any\config"/> 这是额外的内容,但可能不会在项目中使用。 如果您想要一个路由系统,您可以使用内容,但使用 dll 可能会遇到问题。 所以,我想也许你会这样: <file src="bin\Assembly.dll" target="contentFiles\any\any\bin" /> <file src="bin\Assembly.pdb" target="contentFiles\any\any\bin" /> <file src="Config\cf.xml" target="contentFiles\any\any\config"/> <file src="Config\cf.txt" target="contentFiles\any\any\config"/> 以及其他 nuspec 示例(我不会这样做,但是,可以这样做): <files> <file src="content\bin\youtBinayFile" target="content\bin\youtBinayFile" /> <file src="content\Config\YourConfigFile" target="content\Config\YourConfigFile" /> <file src="readme.txt" target="readme.txt" /> </files> 希望对你有帮助
所以我通过命令行使用 MSBuild,但在自定义 .vcxproj 文件时我有几个问题: 如何使用自定义输出而不是默认输出(x64/Debug 和 x64/Release,但我想要 bin/releases...
如何将ProjectPropertyGroupElement的条件评估为bool?
我正在使用 MSBuild API。 我有一个 ProjectRootElement 实例: var project = ProjectRootElement.Create(XmlReader.Create(new StringReader(input))); 然后,我迭代所有 PropertyGroup: 前...
Jet Brains Rider 在构建时使用虚幻引擎编译错误,xml 命名空间
0>UnrealBuildTool.csproj(1,1):错误 MSB4041:项目的默认 XML 命名空间必须是 MSBuild XML 命名空间。如果项目是以 MSBuild 2003 格式编写的,请添加 xmlns...
构建成功,但在使用 MimeTypes nuget 的多框架项目上重建失败
我在使用 Visual Studio 时遇到了一个非常奇怪的问题,如果我构建项目,它会成功运行,但是如果我重新构建,则会出现以下编译错误 该应用程序非常简单,但是
告诉 MSBuild 自定义目标生成的文件是该项目的输出文件,以便将其包含在引用该文件的其他项目的输出中,正确的方法是什么? 我有一个铜...
我正在尝试构建一个 .NET 8 项目。 我收到很多错误。 例如, 现在,在编辑器中,这个“错误”被设置为“建议”。 这是我的代码样式设置。 还有菲...
如何在未安装 Visual Studio 的 PC 上运行 VS 2015 中的 TextTransform.exe?
我将 TextTransform.exe 从安装了 VS 2015 Update 3 的 PC 从位置 C:\Program Files (x86)\Common Files\Microsoft Shared\TextTemplated .0\TextTransform.exe 复制到没有安装 VS 2015 ins 的 PC...
我有一个项目,它在构建时将某些文件复制到其输出文件夹。问题是这些文件可以独立于实际项目进行更改,此时 Visual Studio 声称一切......
尝试使用 DocFX 会导致错误“无法检测到 MSBuild 实例”
我使用命令行向导创建了一个 docFx 项目。当我尝试使用 docfx ./docfx.json 呈现文档时,出现以下错误: ExtractMetadataException:没有 MSBuild 实例
“project.assets.json 没有“net8.0-windows10.0.22621.0”的目标”,但有,并且包恢复成功?
我的解决方案中有两个简单的控制台应用程序,我正在尝试使用 azure devops 构建管道来构建它们。它们可以在任何笔记本电脑上构建得很好,但 azure devops 构建管道
如果 ItemGroup 包含某个项目,如何进行 MSBuild 条件测试?
这应该很简单,但我找不到如何做到这一点(或者也许这是不可能的)。 在 MSBuild 中,我有一个 ItemGroup,它是文件列表。 我只想在特定文件是我时执行任务...