小编DrG*_*iff的帖子

TeamCity使用C#6构建

我们使用TeamCity(9.0.1)作为构建服务器,但最近升级了我们的ASP.NET MVC解决方案以使用VS2015和C#6语法,现在我在构建服务器上收到以下错误消息:

无法启动构建运行器

更具体地说:

C:\ TeamCity\buildAgent\work\86ee61c6c333dc3d\MyApplication\MyApplication.csproj.metaproj:错误MSB4025:无法加载项目文件.找不到文件'C:\ TeamCity\buildAgent\work\86ee61c6c333dc3d\MyApplication\MyApplication.csproj.metaproj'.

我在几个不同的帖子中遵循了建议(尽管这些主要是TFS专注而不是TeamCity,并且不直接引用缺少的".metaproj"文件):

总而言之,我对Build Server进行了以下更改:

  1. 安装Visual Studio 2015 Update 2
  2. 更改了执行构建的PowerShell脚本

来自:

msbuild'..\MyApplication.sln'/ t:Build/p:Configuration = Release/p:RunCodeAnalysis = Always /p:VisualStudioVersion=12.0

:

msbuild'..\MyApplication.sln'/ t:Build /tv:14.0/p:GenerateBuildInfoConfigFile = false/p:Configuration = Release/p:RunCodeAnalysis = Always/p:VisualStudioVersion = 14 .0

注意:

  • 如果我登录构建服务器并尝试使用VisualStudio 2015编译解决方案,那么这很好.

  • 在上面提到的一个帖子中,它讨论了从"TfvsTemplate.11.1.xaml"升级到"TfvsTemplate.12.xaml".但据我所知,我不会使用或参考这个.也许我在这里弄错了,在这种情况下,我们将非常感激地接受下一步该做什么的白痴指南.

msbuild teamcity tfsbuild roslyn c#-6.0

7
推荐指数
1
解决办法
4683
查看次数

Roslyn加载项目文档失败

在Visual Studio扩展(VSIX)解决方案中,我使用Roslyn从当前解决方案加载特定项目:

Project myProject = 
    this.CurrentComponentModel.GetService<VisualStudioWorkspace>()
        .CurrentSolution.Projects
             .FirstOrDefault(p => p.Name == "MyProject")
Run Code Online (Sandbox Code Playgroud)

proProct myProject肯定是加载的,但在检查时我看到:

myProject.HasDocuments == false
myProject.Documents is Empty
Run Code Online (Sandbox Code Playgroud)

然而,在Visual Studio中,我可以看到大量文档.

如果我关闭解决方案并从另一个TFS分支打开相同的解决方案,则相同的代码返回:

myProject.HasDocuments == true 
myProject.Documents is not Empty
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# visual-studio visual-studio-extensions roslyn roslyn-code-analysis

7
推荐指数
1
解决办法
786
查看次数

NuGet软件包(.NET Standard 2.x)打破了ASP.NET MVC5应用程序(.NET完整框架)

(更新-见下文)

我有一个ASP.NET MVC5应用程序(多个程序集),都解决了.NET Full Framework 4.7.1的问题。

我最近添加了一个使用.NET Standard 2构建的(私有)NuGet软件包。从快速入门:使用Visual Studio(.NET Framework)创建和发布一个软件包

除非您有其他选择,否则.NET Standard是NuGet软件包的首选目标,因为它提供了与最广泛使用项目的兼容性。

从那以后,事情就变得不一样了.....下面列出了一系列错误,但是我怀疑它们都是同一问题的征兆(最后讨论)。

请注意:我使用的是Visual Studio 15.7.1,所有NuGet软件包都使用package.config管理格式,而不是PackageReference。

第一个问题

找不到方法:'System.Collections.ObjectModel.Collection`1 System.Web.Http.HttpConfiguration.get_MessageHandlers()'

我的猜测是,有一个.NET Standard版本的System.Web.Http没有此方法,我的应用程序选择了解决此问题,而不是4.7.1框架。

我通过将以下内容添加到我的web.config文件中来部分解决此问题:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

我说“部分地”修复了该问题,这可以在我的DEV环境(使用Visual Studio)中运行时解决此问题,但是当发布到我们的QA环境中时,问题仍然存在。有想法该怎么解决这个吗?

注意:MVC项目对System.Net.Http的引用位于以下路径中(它不是NuGet包):

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net471 \ lib \ System.Net.Http.dll

第二个问题 大会中有两个涉及从各种Web来源(WCF,Web-api,Web服务)提取数据。在发布模式下(在我已打开代码分析等的情况下)编译它们时,收到以下错误报告:

试图加载格式错误的程序集:C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.7.1 \ Facades …

c# asp.net-mvc nuget .net-standard

7
推荐指数
1
解决办法
735
查看次数

Visual Studio 2019 - 添加客户端库(TypeScript、JQuery 等)的正确方法

[2019 年 7 月 16 日编辑#1] 我很困惑。我正在尝试一个 .NET Core 3.x Web 应用程序,我想在其中使用:

  • jQuery
  • 打字稿

我已经让 TypeScript 工作了,但它拒绝理解 jQuery '$' 符号。

我已经通过 NuGet 添加了“DefinitelyTyped”库,但没有任何乐趣。

我认为我的困惑在于我应该如何添加这些客户端库。我尝试添加客户端库(通过右键单击解决方案),并将其放入 libman.json 文件中。还有一种使用package.json(我认为是node)的方法。

我真正想了解的是Visual Studio 2019的首选方式是什么。

关于具体问题(我确实可以通过一些“新手”指导来做到这一点)......

在依赖项下,我现在有:

NPN

  • 德尔
  • 吞咽
  • jQuery
  • jquery-ui

努格特

  • jquery.TypeScript.DefinitelyTyped
  • jqueryui.TypeScript.DefinitelyTyped Microsoft
  • Microsoft.TypeScript.MSBuild

然后,在脚本下我有 example.ts

var example = {
    showGreeting: function(): void {
        alert("Hello user");
        let x: any = $('abc');
    }
};

example.showGreeting();
Run Code Online (Sandbox Code Playgroud)

(这是无法识别“$”符号的地方)

tsconfig.json

{
  "compilerOptions": {
    "noImplicitAny": true,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5" …
Run Code Online (Sandbox Code Playgroud)

jquery client-side visual-studio typescript

7
推荐指数
1
解决办法
5061
查看次数

如何在 Visual Studio 扩展 (vsix) 中包含 Nuget 包

我创建了一个 Visual Studio 扩展 (VSIX),它使用 Roslyn 更改我们的应用程序代码。

VSIX 解决方案包括 NUGET 包 Microsoft.CodeAnalysis.Analyzers。顺便说一句,它被描述为版本 1.3.2,但底层 DLL(例如“Microsoft.CodeAnalysis.CSharp.dll”)均报告为 1.3.2。

不管怎样,我把这个放在我们当地的私人画廊里。从那里,我可以将其添加到 Visual Studio (VS2015 Update 3),它会按预期执行。

然而,当我的同事将其添加到他们的 Visual Studio (VS2015 Update 3) 并尝试执行它后,他们收到以下消息:


微软视觉工作室

无法加载文件或程序集“Microsoft.VisualStudio.LanguageServices,Version=1.3.1.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。该系统找不到指定的文件。

好的

当我查看 VSIX 存档时,我确实看到了许多 DLL,但这些是“我的 DLL”以及所有带有前缀“System.”的 DLL。我没有看到任何带有前缀“Microsoft”的内容。我确实尝试手动将 BIN 文件夹中的每个 DLL 复制到 VSIX,看看是否会产生任何影响,但没有成功。

所有引用的 DLL 似乎都具有“本地复制”,因此它们位于我的 BIN 中,但在最终用户的计算机上无法访问它们。

我看到清单可以包含“资产”和“依赖项”,但目前还不清楚这些是否可以用于 NUGET 包。

我缺少什么?

visual-studio vsix nuget visual-studio-2015

6
推荐指数
1
解决办法
3209
查看次数

不接受MSBuild 15工具版本

我在构建服务器上安装了Visual Studio 2017的MSBuild(15.4.0)工具.为此,我使用了Visual Studio Downloads中标题为"Visual Studio 2017的构建工具"的链接

MSBuild.exe的路径是:

C:\ Program Files(x86)\ Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin

我已将此路径添加到环境变量"路径".

我有一个powershell脚本,以下作为构建任务的主体:

msbuild'..\MyApplication.sln'/ t:Build /tv:15.0/p:GenerateBuildInfoConfigFile = false/p:Configuration = Release/p:RunCodeAnalysis = True /p:VisualStudioVersion=15.0

但是,当执行此操作时(全部由TeamCity处理)我在LOG中找到以下内容:

MSBUILD:错误MSB1040:ToolsVersion无效.工具版本"15.0"无法识别.可用的工具版本是"2.0","3.5","4.0".

文件表明,15.0应该是正确的.

编辑 从2017 年MSbuild 15中的新功能文档中可以看出:

此版本工具的MSBuildToolsVersion为15.0.程序集版本为15.1.0.0.

但是,2017年文档MSBuild命令行参考指出:

对于MSBuild 4.5,您可以为版本指定以下值:2.0,3.5和4.0.如果指定4.0,则VisualStudioVersion构建属性指定要使用的子工具集.有关更多信息,请参阅Toolset的子工具集部分(ToolsVersion).

所以我对命名法有点困惑:MSBuild 15或MSBuild 4.5 ......?

msbuild build-tools build-server visual-studio-2017

6
推荐指数
1
解决办法
8206
查看次数

创建 NuGet 包:NU5128 异常 - 不清楚如何修复

我有一个指向 .NET 4.7.1 库的 DLL。

可能无关紧要,但它是用 C# 编写的,并且使用“packages.config”模式而不是较新的 PackageReference 配置使用 NuGet 包。

我将它发布为 NuGet 包(多年来一直这样做)。但是现在当我执行以下操作时:

nuget pack -Properties Configuration=Release
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

错误 NU5128:在 nuspec 和 lib/ref 文件夹的依赖项组中声明的某些目标框架在其他位置没有完全匹配。请参阅以下操作列表: - 将 .NETFramework4.7.1 的依赖项组添加到 nuspec

我在 nuspec 的依赖项组中没有任何内容:

<?xml version="1.0"?> 
<package >   
    <metadata>
        <id>*******</id>
        <version>*******</version>
        <title>*******</title>
        <authors>*******</authors>
        <owners>*******</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>*******</description>
        <releaseNotes>*******</releaseNotes>
        <copyright>*******</copyright>
        <tags>*******</tags>
   </metadata> 
</package>
Run Code Online (Sandbox Code Playgroud)

这会消耗以下 NuGet 包:

  • Microsoft.AspNet.WebApi.Client v5.2.7
  • Microsoft.AspNet.WebApi.Core v5.2.7
  • Microsoft.CodeAnalysis.FxCopAnalyzers v2.9.8
  • Microsoft.CodeAnalysis.VersionCheckAnalyzer v2.9.8
  • Microsoft.CodeQuality.Analyzers v2.9.8
  • Microsoft.NetCore.Analyzers v2.9.8
  • Microsoft.NetFramework.Analyzers v2.9.8
  • Newtonsoft.Json v12.0.3
  • StyleCop.Analyzers v1.1.118

当我查看参考文献时,我看到以下内容(使用 ~ 来缩短路径):

  • Microsoft.CSharp ~.NETFramework\v4.7.1\Microsoft.CSharp.dll
  • Newtonsoft.Json ~\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll
  • 系统 …

.net nuget nuget-package nuspec

6
推荐指数
1
解决办法
3038
查看次数

Roslyn向现有类添加新方法

我正在研究使用VisualStudioWorkspace更新现有代码的Visual Studio扩展(VSIX)中Roslyn编译器的使用。花了近几天的时间进行阅读,似乎有几种方法可以实现此目标。。。我只是不确定哪种方法最适合我。

好的,让我们假设用户在Visual Studio 2015中打开了解决方案。他们单击我的扩展,然后(通过表单)告诉我要向接口添加以下方法定义:

GetSomeDataResponse GetSomeData(GetSomeDataRequest request);
Run Code Online (Sandbox Code Playgroud)

他们还告诉我接口的名称,即ITheInterface

接口中已经包含一些代码:

namespace TheProjectName.Interfaces
{
    using System;
    public interface ITheInterface
    {
        /// <summary>
        ///    A lonely method.
        /// </summary>
        LonelyMethodResponse LonelyMethod(LonelyMethodRequest request);
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,所以我可以使用以下方法加载接口文档:

Document myInterface = this.Workspace.CurrentSolution?.Projects?
    .FirstOrDefault(p 
        => p.Name.Equals("TheProjectName"))
    ?.Documents?
        .FirstOrDefault(d 
            => d.Name.Equals("ITheInterface.cs"));
Run Code Online (Sandbox Code Playgroud)

那么,现在将我的新方法添加到此现有接口中的最佳方法是什么,最好也写XML注释(三斜杠注释)呢?请记住,请求和响应类型(GetSomeDataRequest和GetSomeDataResponse)可能实际上还不存在。我对此很陌生,所以如果您可以提供代码示例,那将是非常棒的。

更新

我认为最好的方法(可能)只是插入一些文本,而不是尝试以编程方式构建方法声明。

我尝试了以下操作,但最终出现了一个我不理解的异常:

SourceText sourceText = await myInterface.GetTextAsync();
string text = sourceText.ToString();
var sb = new StringBuilder();

// I want to all the text up to and including the last
// method, but …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-extensions roslyn roslyn-code-analysis

5
推荐指数
1
解决办法
2826
查看次数

Span&lt;T&gt; 和异步方法

我已经阅读了一些关于Span<T>(and ReadOnlySpan<T>) 以及它们不能用于异步方法的文章。

Jared Parsons 有一段很棒的 Chanel 9 视频,他展示了以下示例:

static async Task<bool> IsCSharpIdentifierAsync(Memory<char> memory, StreamReader reader)
{
    var count = await reader.ReadAsync(memory);
    return IsCSharpIdentifier(memory.Span.Slice(0, count));
}

static bool IsCSharpIdentifier(ReadOnlySpan<char> value)
{
   ....
}

Run Code Online (Sandbox Code Playgroud)

因此,整个流程可能是异步的,但如果我们调用使用 Span 的同步方法,我们就可以了。

现在,我已经很少,如果编译左右任何知识,但我明白,编译器可能(在某些情况下),“在线”的方法(复制从调用的方法到调用方法的代码),以减少的开销方法调用。

我猜答案是“哼哼……当然不是”,但是编译器有没有可能将使用 Span 的方法内联到异步方法中?如果是这样,那会导致我理解的问题......(这包括“本地方法”)

c# async-await

4
推荐指数
1
解决办法
310
查看次数

使用多个框架时,.Net 5 的 Azure Devops Build 失败

我有一个使用以下框架构建的项目:

<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>

Run Code Online (Sandbox Code Playgroud)

这在我的本地计算机上编译得很好,但是当我将其推送到 Azure 时,它​​失败了。

当我的 YAML 文件中有以下内容时:

variables:
  solution: '**/*.sln'
  buildConfiguration: 'Release'
  buildPlatform: 'Any CPU'
  platform: x64

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'
    arguments: '--configuration $(buildConfiguration)'
Run Code Online (Sandbox Code Playgroud)

然后我得到:

##[错误]C:\Program Files\dotnet\sdk\3.1.403\Microsoft.Common.CurrentVersion.targets(1177,5): 错误 MSB3644: 找不到 .NETFramework,Version=v5.0 的参考程序集。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在 https://aka.ms/msbuild/developerpacks下载 .NET Framework 开发人员包

如果我尝试

- task: VSBuild@1
  displayName: 'Build all'
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    maximumCpuCount: true
Run Code Online (Sandbox Code Playgroud)

我得到:

##[错误]C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1177,5):错误 MSB3644:.NETFramework 的参考程序集,Version=v5.0 未找到。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在 https://aka.ms/msbuild/developerpacks下载 .NET Framework 开发人员包

  1. 开发人员包文档仅引用较旧的 .Net Framework,因此我怀疑这是不相关/过时的。
  2. 如果我将 .Net 5 更改为 .Net Core 3.1,则效果很好,即 …

azure-devops azure-pipelines .net-5 dotnetcorecli

4
推荐指数
1
解决办法
4277
查看次数