- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我生成一个 C# 项目(csproj
文件)并对其进行编译时,msbuild
不知何故无法识别预生成和生成后事件中的变量 $(ConfigurationName)
和 $(ProjectDir)
(以及其他)。
当我手动将生成的 .csproj
文件中的构建前和构建后事件配置进一步向下移动时,msbuild 可以正确识别这些变量。
将 buildevent 添加到项目是我在保存项目之前做的最后一件事。
这是我添加它的方式:
using Microsoft.Build.Construction;
using Microsoft.Build.Evaluation;
private const string PreBuildEventFixture = "PreBuildEvent";
private const string PostBuildEventFixture = "PostBuildEvent";
private const string PreBuildEvent = "attrib -R \"$(ProjectDir)app.config\"";
private const string PostBuildEvent = "copy \"$(ProjectDir)app.config.$(ConfigurationName)\" \"$(TargetDir)\\$(ProjectName).dll.config\" \r\n attrib -R \"$(ProjectPath)\"";
public void AddBuildEvents(Project project)
{
ProjectPropertyGroupElement propertyGroupElement = project.Xml.AddPropertyGroup();
propertyGroupElement.AddProperty(PreBuildEventFixture, PreBuildEvent);
propertyGroupElement.AddProperty(PostBuildEventFixture, PostBuildEvent);
}
我在通过msbuild运行生成的项目时得到的错误是这样的:
The command "copy "app.config." "\.dll.config"" exited with code 1
当我随后手动编辑 .csproj
文件(使用记事本或其他文本编辑器)时,剪切构建前和构建后事件,并将其粘贴到 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
元素下方,然后 msbuild 构建生成的 .csproj
文件正常。
将构建事件添加到 .csproj
文件以使其在生成的 Import
中的 XML
元素之后结束的最佳方法是什么?
显然,我目前通过从 AddPropertyGroup 的 Xml 属性的 Microsoft.Build.Evaluation.Project 请求它来使用 [ProjectPropertyGroupElement][1]
的方式不是。
示例项目:
using System.IO;
using Microsoft.Build.Construction;
using Microsoft.Build.Evaluation;
class Program
{
private const string PreBuildEventFixture = "PreBuildEvent";
private const string PostBuildEventFixture = "PostBuildEvent";
private const string PreBuildEvent = "attrib -R \"$(ProjectDir)app.config\"";
private const string PostBuildEvent = "copy \"$(ProjectDir)app.config.$(ConfigurationName)\" \"$(TargetDir)\\$(ProjectName).exe.config\" \r\n attrib -R \"$(ProjectPath)\"";
private const string ProjectFile = @"C:\test\TestProject\TestProject.csproj";
static void Main(string[] args)
{
if (!File.Exists(ProjectFile))
throw new FileNotFoundException("ProjectFile not found");
ProjectCollection collection = new ProjectCollection();
Project project = collection.LoadProject(ProjectFile);
ProjectPropertyGroupElement propertyGroupElement = project.Xml.AddPropertyGroup();
propertyGroupElement.AddProperty(PreBuildEventFixture, PreBuildEvent);
propertyGroupElement.AddProperty(PostBuildEventFixture, PostBuildEvent);
project.Save();
collection.UnloadAllProjects();
}
}
重现步骤
copy "$(ProjectDir)app.config.$(ConfigurationName)" "$(TargetDir)\$(ProjectName).exe.config
The system cannot find the file specified.
最佳答案
var propertyGroupElement = project.Xml.CreatePropertyGroupElement();
project.Xml.AppendChild(propertyGroupElement);
propertyGroupElement.AddProperty(PreBuildEventFixture, PreBuildEvent);
propertyGroupElement.AddProperty(PostBuildEventFixture, PostBuildEvent);
关于c# - 向项目添加 Postbuild 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25567949/
我添加了一个 AfterBuild目标到 Visual Studio 项目,它是包含多个 Visual Studio 项目的解决方案的一部分。 示例解决方案设置 例子.sln ExampleProj.
持续集成 我一直在开发 PowerShell 脚本,以简化我们的开发流程。我原本计划将其作为构建后事件来运行,但遇到了一些麻烦。 在 PowerShell 提示符下,以下操作效果非常好: PS C:\
在项目选项中使用以下指令构建/运行项目时,我设法将编译器设置为执行另一个程序: call program.exe param1 param2 问题在于编译器执行“program.exe”并等待其终止,
我想访问另一个构建后操作的日志,该操作在常规构建后运行。 控制台输出如下所示: Build succeeded. 0 Warning(s) 0 Error(s) Time Elapse
当我生成一个 C# 项目(csproj 文件)并对其进行编译时,msbuild 不知何故无法识别预生成和生成后事件中的变量 $(ConfigurationName) 和 $(ProjectDir)(以
我编写了简单的groovy脚本,但我不知道如何在Jenkins上执行它。 看看这个简单的脚本: String jbN = System.getenv('JOB_NAME') println jbN
是否可以将外部 groovy 脚本加载到 groovy 后期构建插件中,而不是将脚本内容粘贴到每个作业中?我们有大约 200 个职位,因此更新所有职位相当耗时。我知道我可以编写一个脚本来直接更新配置文
我为 npm postbuild 制作了一个 Node 脚本,它执行简单的任务,在 react 应用程序中生成构建后重命名构建文件夹中的文件。 这是文件postbuild.js let fs = re
在 Visual Studio postbuild 中,我需要运行一个批处理文件。该解决方案可能位于与运行 Visual Studio 的驱动器不同的驱动器上。在 postbuild 中,如何确定运行
我想使用参数化构建附加为构建输入的注释,并将其附加到构建摘要页面并输入换行符。我在 groovy postbuild 插件中添加了以下代码: manager.addInfoBadge("Notes a
我是 Groovy 的新手,我正在尝试在 Jenkins 中设置一个后期构建,它允许我对字符串进行计数,并通过最后返回的计数来确定构建是否成功。 这是我的示例代码: class Main { de
我正在尝试为 iOS 项目 执行端到端自动化。我的目标是通过附加 UIAutomation 脚本作为构建后操作来自动化持续集成 过程。所以从用户在SVN中检查他的代码到我们得到自动化测试结果,一切都是
有没有办法使用 Groovy Postbuild action 从 Jenkins 工作发送电子邮件? ?类似于如何使用 Jenkins 管道插件来完成 mail to: 'devops@acme.
是否有一种简单的方法可以在 Visual Studio 项目的构建后事件中复制文件,但前提是该文件存在? (即,如果文件不存在,不要使构建失败) 我已经使用 xcopy 尝试了一些选项。但我觉得很愚蠢
我需要在构建后从我的一些 C# 类生成 typescript 文件。 我创建了 dotnet cli 工具 并添加了构建后事件 dotnet tsgenerator "$(TargetPath)" 其
有没有办法使用 Groovy postbuild 插件读取构建 Artifact 文件? 一些背景:我已经编写了一些由 Jenkins 中的 Maven 运行的 testng 测试。 Jenkins
有没有办法在 Visual Studio 的 dotnet 核心项目中添加预构建/后构建选项? 没有选项可以在项目属性中添加构建事件,因为它曾经是标准点网项目 最佳答案 根据the documenta
我需要在构建完成后运行一组代码。我使用 groovy postbuild 插件(version2.2)。我是 Jenkins 和 groovy 的新手。我尝试了简单的 println,但它不起作用。我
Jenkins Groovy Postbuild 插件 manager.getLogMatcher 如果字符串中存在括号,正则表达式将返回 null。 Jenkins 控制台输出包含字符串: (ori
我有项目 A 依赖于项目 B 但没有从 B 到 A 的引用.我想在项目 B 的 bin 文件夹 中构建程序集并将其复制到项目 A 的 bin 文件夹 中。我如何使用生成后事件和 dotnet msbu
我是一名优秀的程序员,十分优秀!