我有一个XNA项目,我在Visual Studio 2015中编译得非常好,它利用了C#6的功能。
以前,我有一些用C#编码的工具,当它在VS 2013下使用C#5时会自动编译项目,但是对C#6的更改已经破坏了某些东西。
为了重现这一点,我创建了一个新的控制台应用程序,引用了来自Microsoft.Build
的{{1}},Microsoft.Build.Framework
和Microsoft.Build.Utilities.Core
程序集。
然后我使用以下代码创建了我的C#编译器项目:
C:\Program Files (x86)\MSBuild\14.0\Bin
不幸的是,当这次运行时,我收到以下错误:
错误:文件C:\ Program Files(x86)\ MSBuild \ Microsoft \ XNA Game Studio \ v4.0 \ Microsoft.Xna.GameStudio.ContentPipeline.targets第78行消息“BuildContent”任务无法从实例中实例化程序集“Microsoft.Xna.Framework.Content.Pipeline,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 842cf8be1de50553”。请验证是否使用与计算机上安装的Microsoft.Build.Framework程序集相同的Microsoft.Build.Framework程序集版本构建了任务程序集,并确保主机应用程序没有缺少Microsoft.Build.Framework的绑定重定向。无法将“Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent”类型的对象强制转换为“Microsoft.Build.Framework.ITask”。
当我成功编译我的XNA项目时,我尝试在Visual Studio 2015中查看构建输出的详细信息,但即使使用详细日志记录,我发现(看似)相关的是:
namespace CompileXna
{
class Program
{
static void Main(string[] args)
{
const string solutionPath = @"D:\Code\My Projects\FrbTest\FrbTest.sln";
var properties = new Dictionary<string, string>()
{
{"Configuration", "Debug"},
{"Platform", "x86" }
};
var parameters = new BuildParameters
{
Loggers = new ILogger[] {new BuildLogger()}
};
var request = new BuildRequestData(solutionPath, properties, null, new string[] {"Build"}, null);
var manager = BuildManager.DefaultBuildManager.Build(parameters, request);
Console.WriteLine("Done");
Console.ReadLine();
}
}
class BuildLogger : Logger
{
public override void Initialize(IEventSource eventSource)
{
eventSource.ErrorRaised += (sender, args) =>
Console.WriteLine($"Error: File {args.File} line {args.LineNumber} message {args.Message}");
eventSource.WarningRaised += (sender, args) =>
Console.WriteLine($"Warning: File {args.File} line {args.LineNumber} message {args.Message}");
}
}
}
任何人都有这方面的成功吗?