C# 在C中使用MSBuild#
我有一些批次代码:C# 在C中使用MSBuild#,c#,build,msbuild,C#,Build,Msbuild,我有一些批次代码: Path=C:\Windows\Microsoft.NET\Framework64\v4.0.30319 ECHO Trying TFS build... msbuild D:\WORK\project\project.sln /p:Config="Debug" /p:Platform="Any CPU" /flp1:logfile=BuildLogProject.txt 这是正确的。我想在我的C#应用程序中使用MSBuild 我添加了Microsoft.Build.
Path=C:\Windows\Microsoft.NET\Framework64\v4.0.30319
ECHO Trying TFS build...
msbuild D:\WORK\project\project.sln /p:Config="Debug" /p:Platform="Any CPU" /flp1:logfile=BuildLogProject.txt
这是正确的。我想在我的C#应用程序中使用MSBuild
我添加了Microsoft.Build.Engine引用,并且正在使用Engine类。我写了一些代码。但它不起作用
当我使用Visual Studio或批处理程序生成项目时,“生成成功”。当我用我的程序构建项目时,它会发现项目中没有的错误和警告
您的问题是您试图构建.SLN文件。解决方案文件不是msbuild脚本本身。 只有基础.proj文件使用msbuild格式 实际上,当您运行msbuild.exe someSLN.sln时,msbuild会根据sln文件自动生成脚本,然后由引擎执行。我不知道如何自己生成它,但可以通过使用特殊的环境变量查看自动生成的文件(如果试图通过命令行将其作为属性传递,则不起作用) 执行
设置MSBuildEmitSolution=1
执行后,msbuild.exe someSLN.sln您将在.sln one附近找到someSLN.sln.metaproj文件。当您试图通过命令行和msbuild.exe构建解决方案时,这正是BuildEngine提供给BuildEngine的内容。我想您已经知道BuildEngine.engine类在.NET framework 4中被标记为过时。是的,我使用的是build.BuildEngine。它过时了吗?然而,我知道engine.Binpath方法已经过时了。但是当我构建我的项目时,没有错误。
Engine engine = new Engine();
engine.BinPath = @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319";
FileLogger logger = new FileLogger();
logger.Parameters = @"logfile=D:\WORK\project\BuildLogProject.txt";
engine.RegisterLogger(logger);
string projectPath = @"D:\WORK\project\project.sln";
try
{
bool success = engine.BuildProjectFile(projectPath);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
engine.UnregisterAllLoggers();
engine.UnloadAllProjects();
}