.net core 通过在.NET Core中使用task编写自定义任务会导致生成失败(缺少程序集)

.net core 通过在.NET Core中使用task编写自定义任务会导致生成失败(缺少程序集),.net-core,.net Core,我的目标是在.NETCore中运行任务(类似于Rails land中的rake),这样我就可以在应用程序生命周期的正常控制流之外执行代码。我已经看到有这样的项目应该可以实现这一点,但我正在尝试“以.NET的方式”实现它,而不是引入一个单独的ruby依赖项来实现这一点 在为msbuild编写任务之后,我成功地创建了一个简单的任务,它实现了本文中建议的ITask接口: 电子商务网站/Tasks/ScrapeAll.cs using System; using Microsoft.Build.Fram

我的目标是在.NETCore中运行任务(类似于Rails land中的
rake
),这样我就可以在应用程序生命周期的正常控制流之外执行代码。我已经看到有这样的项目应该可以实现这一点,但我正在尝试“以.NET的方式”实现它,而不是引入一个单独的ruby依赖项来实现这一点

在为
msbuild
编写任务之后,我成功地创建了一个简单的
任务
,它实现了本文中建议的
ITask
接口:

电子商务网站/Tasks/ScrapeAll.cs

using System;
using Microsoft.Build.Framework;  
using Microsoft.Build.Utilities;

namespace Tasks
{
    public class ScrapeAll : Task
    {
        public override bool Execute()
        {
            return true;
        }
    }
}
我的
.csproj
文件使用
UsingTask
元素注册我的任务代码,我有一个调用任务的
Target

电子商务网站/电子商务网站.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup> 

  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" />
    <PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.3" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" />
    <PackageReference Include="Microsoft.Build.Framework" Version="15.3.409" />
    <PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.3.409" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Views\ItemPage\" />
    <Folder Include="Tasks\" />
  </ItemGroup>

  <UsingTask TaskName="Tasks.ScrapeAll" AssemblyFile="bin/Debug/netcoreapp2.0/EcommerceSite.dll" />

  <Target Name="ScrapeAll">
    <Tasks.ScrapeAll />
  </Target>
</Project>
因此,我的问题是:

  • 为什么我的
    任务
    试图加载Microsoft.AspNetCore.Mvc.ViewFeatures,根据,它包含: 视图呈现功能,例如视图引擎、视图、视图组件和HTML帮助程序

  • 其中我的
    任务
    没有做类似的事情

  • 如何使其尝试加载此程序集,或者如果这不是一个选项,如何解决依赖性问题

  • 我今晚要把它修好。你可以看到

    本质上,我遇到了两个问题:

  • 我在元素中包含名称空间。一旦我删除它并使用类名,错误就消失了
  • 路径也让事情变得奇怪。我从一条绝对路径开始,它运行良好。从那里我可以找出相对路径,它只是从bin目录开始:
  • AssemblyFile=“bin\debug\netcoreapp2.0\PublishPipelineTesting.dll”/>

    一旦我开始工作,并且自定义任务正在运行,返回true/false将允许构建通过或失败,这正是我想要的。当返回“false”时,我现在会得到:

    C:\git\CustomBuildTargets\PublishPipelineTesting>dotnet运行 PublishPipelineTesting.csproj

    构建失败。请修复生成错误并重新运行

    当任务返回true时,生成将通过,项目将运行:

    C:\git\CustomBuildTargets\PublishPipelineTesting>dotnet运行 PublishPipelineTesting.csproj
    你好,世界


    我遇到的问题是,包含我的任务的项目针对的是netcoreapp2.1框架。。。。我也将其更改为目标netstandard2.0,然后进入目标并将程序集文件路径更改为netstandard2.0,而不是netcoreapp2.1。在那之后,我的自定义任务工作得很好。

    遇到了几乎完全相同的问题。当我通过“dotnet msbuild”生成时,我得到了几乎相同的错误:[……]错误MSB4036:找不到“PublishValidationTask”任务。检查以下内容:1.)项目文件中任务的名称与任务类的名称相同。2.)任务类是“公共”的,并实现Microsoft.Build.Framework.ITask接口。3.)任务在项目文件中或位于“C:\Program files\dotnet\sdk\2.1.201”目录中的*.tasks文件中正确声明。
    error MSB4062: The "Tasks.ScrapeAll" task could not be loaded from the assembly 
    [redacted]/EcommerceSite/bin/Debug/netcoreapp2.0/EcommerceSite.dll. 
    Could not load file or assembly 'Microsoft.AspNetCore.Mvc.ViewFeatures, 
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. 
    The system cannot find the file specified.
    
    [redacted]/EcommerceSite/EcommerceSite.csproj(33,5): error MSB4062:  
    Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, 
    and that the task contains a public class that implements Microsoft.Build.Framework.ITask
    
    <UsingTask TaskName="PublishValidationTask"
    AssemblyFile="C:\git\CustomBuildTargets\PublishPipelineTesting\bin\debug\netcoreapp2.0\PublishPipelineTesting.dll"
    />
    
    C:\git\CustomBuildTargets\PublishPipelineTesting>dotnet msbuild PublishPipelineTesting.csproj
    Microsoft (R) Build Engine version 15.7.179.6572 for .NET Core
    Copyright (C) Microsoft Corporation. All rights reserved.
    
      PublishPipelineTesting -> C:\git\CustomBuildTargets\PublishPipelineTesting\bin\Debug\netcoreapp2.0\PublishPipelineTesting.dll
      This is a test
      Hello World