【发布时间】:2021-06-04 19:22:28
【问题描述】:
我有一个使用 VS2019 的 C# 项目的基本构建任务示例,当我针对 net48 等单个框架时,它可以按预期工作
public class MyTask : Microsoft.Build.Utilities.Task
{
public override bool Execute()
{
Log.LogMessage("Hey I ran!");
return true;
}
}
我的 csproj:
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
<UsingTask TaskName="MyTask" AssemblyFile="bin\Debug\net48\MyAssembly.dll" />
<Target Name="SomeTask" AfterTargets="Build>
<MyTask />
</Target>
但是,如果我尝试多目标我的应用程序(需要我分发的一个使用良好的 nuget 包),任务将无法运行。我试过添加变量甚至一些条件,但总是找不到任务程序集或任务本身。
<UsingTask TaskName="MyTask" AssemblyFile="bin\Debug\$(TargetFramework)\MyAssembly.dll" />
<UsingTask TaskName="MyTask" AssemblyFile="bin\Debug\net48\MyAssembly.dll" Condition="'$(TargetFramework)' == 'net48'" />
启用多目标时的错误:
MyProject.csproj(71,3): error MSB4036: The "MyTask" task was not 成立。检查以下内容:1.) 项目中的任务名称 文件与任务类的名称相同。 2.) 任务类是 “public”并实现 Microsoft.Build.Framework.ITask 接口。 3.) 在项目文件或位于“C:\Program”的 *.tasks 文件中正确声明了任务 Files\dotnet\sdk\5.0.200" 目录。
尝试解析程序集时的错误:
MyProject.csproj(70,3): error MSB4062: The "MyTask" task could not be 从程序集 B:..\bin\Release\MyAssembly.dll 加载。不能 加载文件或程序集“B:..bin\Release\MyAssembly.dll”。系统 找不到指定的文件。确认 声明是正确的,程序集及其所有依赖项都是 可用,并且该任务包含一个公共类,该类实现 Microsoft.Build.Framework.ITask。
有人知道如何解决这个问题吗?
【问题讨论】:
-
这可能是一个有争议的问题,但似乎这可能与以前版本的 msbuild 或框架中的某些东西一起工作 - 它只是在过去 3-6 个月的某个时候表现得这样,我无法再使用通过 nuget 分发的任务了。
-
嗨迈克尔,关于这个问题的任何更新?
-
是的,我还没有机会回过头来使用您的解决方案进行测试,我今天会尽力做到这一点(我最终放弃了 ILRepack 任务,但想去如果它会工作,回到它)
-
当然。这是你的选择,我一直都在。
-
有关此问题的任何更新,请检查我的回答是否有助于您处理该问题。如果有帮助,请不要忘记accept it。如果没有,请随时告诉我们:)
标签: c# visual-studio msbuild visual-studio-2019 msbuild-task