c# - MSBuild 编译失败但通过 Visual Studios 2017

标签 c# jenkins msbuild visual-studio-2017

我的项目在 VS2017 中成功构建,但在使用旧 MSBuild (v14.0 C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe) 的 Jenkins 上失败。错误日志显示缺少字符,例如分号和大括号。我查看了失败的文件,发现大部分“错误”都与下面的这个方法调用有关。

if (cache.TryGetProxyById<ResultTagTypeProxy, ResultTagType>(this.ResultTagTypeId, out var existingTagType))
                this.ResultTagType = existingTagType;
public TProxy GetOrCreateProxy<TProxy, TModel>(TModel navModel, Func<TModel, ProxyCache, TProxy> proxyConstructor)
            where TProxy : ModelProxyBase<TModel>
            where TModel : IDatabaseEntity
        {
            TProxy navProxy = null;

            // Set the navigation property if it already exists in the cache by model
            if (this.TryGetProxyByModel<TProxy, TModel>(navModel, out var existingProxy))
                navProxy = existingProxy;
            else if (navModel != null)
            {
                // Else try loading by id
                if (this.TryGetProxyById<TProxy, TModel>(navModel.Id, out existingProxy))
                    navProxy = existingProxy;
                // Else create a
                else
                    navProxy = proxyConstructor(navModel, this);
            }

            return navProxy;
        }

我认为问题在于此 MSBuild 不支持 C# 7 新功能,我需要下载新的 MSBuild。我一直在使用 chocolatey 来安装我的软件包,并且我安装了“microsoft-build-tools”。

在构建工具路径(C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSbuild.exe)中使用新的MSBuild,我发现有不同的编译错误.第一个错误是我的一个项目需要引用 netstandard 2.0。修复该引用后,在我的功能测试项目中找不到更多引用。

我想知道这种变化(从 MSBuild 14.0 迁移到 MSBuild 15.0)是否符合预期。功能测试项目之前的所有内容都已成功编译...

最佳答案

I was wondering if this change (moving from MSBuild 14.0 to MSBuild 15.0) is expected. Everything up to the functional test project compiles successfully...

1.我们始终推荐使用vs版本对应的msbuild工具。

由于您的项目来自 VS2017 并且在其中构建良好。当您需要在 VS IDE 之外构建它时,Build tools for VS2017(Msbuild 15.0) 包应该是不错的选择。

ps: VS2015 <=> MSBuild14.0, VS2017 <=> MSBuild15.0

vs2017 构建工具 包中 msbuild.exe 的默认路径:C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin

2.此外,正如 Jonathon 的评论中所述,为了支持 C# 7 功能,我们需要使用 Msbuild15.0 版本。

假设您有两个项目(A 和 B,A 使用 C#7 而 B 不使用)。在您的 CI 服务器中,您可以使用 msbuild14.0 来构建 B 而不是 A,如果您有 msbuild15.0,则可以使用它构建 A 和 B 等等。

所以我认为从 14.0 迁移到 15.0 是一个意料之中的选择。

此外:

在vs中新建一个C#工程,右击Project=>Properties=>Build=>Advanced可以看到语言版本列表。

第一张图片是 vs2015 和 msbuild14.0,第二张是 vs2017 和 msbuild15.0:

enter image description here enter image description here

关于c# - MSBuild 编译失败但通过 Visual Studios 2017,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56014034/

相关文章:

c# - 如果搜索项为 null 或为空,则返回所有记录的 Linq 查询

c# - WCF 仅在满足特定条件时调用方法,否则等待

MSBuild 找不到引用 - ReactJs.NET

vs2017 的 MSBuild.Community.Tasks 问题

python - 尝试使用MSBuild工具,Python,pip和Python依赖关系创建docker容器

c# - get_SynonymInfo 某些词抛出内存不足异常

c# - 如何在 Iron python 中加载用 C++ 编写并用 C# 包装的 DLL?

github - 使用随机主机端口启动 Docker 容器并返回该端口以在其他地方使用它

Jenkins:如何将作业的 Build ID 重置为与 Jenkins Global 相同的格式?

jenkins - 如何在 Jenkins Groovy 中的多行 shell 脚本中设置变量?