首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MSBuild UsingTask解析引用

MSBuild UsingTask解析引用
EN

Stack Overflow用户
提问于 2012-11-25 06:30:13
回答 2查看 10.2K关注 0票数 23

我觉得我以前修复过这个问题,但我记不清是怎么修复的。

我有一个任务文件,看起来像这样(CustomTasks.tasks):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<UsingTask AssemblyFile="CustomTasks.dll" TaskName="MyCustomTask"/>

它引用了一个程序集(即Ionic.Zip.dll)。Ionic.Zip.dll不在GAC中(我也不希望它在GAC中)。它就在我的CustomTasks.dll旁边。

我有一个名为MSBuild的目录,这个目录比我的sln文件高一级,里面有CustomTasks.tasks、CustomTasks.dll和Ionic.Zip.dll。

我有一个引用任务文件并调用自定义任务的csproj:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Import Project="$(ProjectDir)\..\MSBuild\CustomTasks.tasks" />

<MyCustomTask ..... />

在构建时,这会产生以下结果:

无法从程序集....MyCustomTasks.dll加载"MyCustomTask“任务。无法加载文件或程序集'Ionic.Zip,......‘或者它的一个依赖项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-25 07:07:08

感到疲倦和沮丧,并采取了直接的方法……我不认为这是我解决问题的相同方式,previously...but也许这会对其他人有帮助。其他更优雅的解决方案也非常受欢迎。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <Target Name="BeforeBeforeBuild" BeforeTargets="BeforeBuild">
    <HandleAssemblyResolve SearchPath="$(ProjectDir)\..\MSBuild\" />
  </Target>
  <UsingTask TaskName="HandleAssemblyResolve" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <SearchPath ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
      <Using Namespace="System" />
      <Using Namespace="System.IO" />
      <Using Namespace="System.Reflection" />
      <Code Type="Fragment" Language="cs">
        <![CDATA[
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => 
{ 
  var assemblySearchPath = Path.Combine(SearchPath, e.Name.Split(',')[0]);
  if (File.Exists(assemblySearchPath)) return Assembly.LoadFrom(assemblySearchPath);

  return null;
};
]]>
      </Code>
    </Task>
  </UsingTask>
票数 27
EN

Stack Overflow用户

发布于 2015-03-16 13:02:15

这实际上很容易修复。将您的自定义生成任务和依赖项放在不同的文件夹中。然后,依赖项被正确加载。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<UsingTask AssemblyFile="..\BuildTools\CustomTasks.dll" TaskName="MyCustomTask"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13548851

复制
相关文章
如何在 csproj 中用 C# 代码写一个内联的编译任务 Task
我之前写过一些改变 MSBuild 编译过程的一些博客,包括利用 Microsoft.NET.Sdk 中各种自带的 Task 来执行各种各样的编译任务。更复杂的任务难以直接利用自带的 Task 实现,需要自己写 Task。
walterlv
2020/02/10
1.7K1
MSBuild入门(续)
MSBuild基本概念(续) 在上一篇简单的介绍了下MSBuild中的四个基本块,每块介绍比较单薄,在这里对在大多数的项目模版生成的*.*proj文件中比较常见一些用法和概念做些补充。主要有一下几方面: MSBuild特殊字符:MSBuild保留的一些字符,以及XML中的特殊字符处理。 MSBuild条件: Condition特性,作用类似于C#的if。 MSBuild属性: 使用环境变量、保留属性、全局属性。 MSBuild项: 元数据、项转换。 MSBuild任务: ITask接口、UsingTask[
blackheart
2018/01/19
9820
.NET魔法堂:工程构建基石->MSBuild
一、前言                               MSBuild是一个既熟悉又陌生的名字,Visual Studio的项目加载和构建均通过MSBuild来实现。VS中右键打开项目菜
^_^肥仔John
2018/01/18
2K0
.NET魔法堂:工程构建基石->MSBuild
Roslyn 开发 NuGet 包的 Task 编译可能遇到的问题
在写 msbuild 脚本的时候,或修改项目文件的时候,将会使用到很多的微软提供的 Task 命令。在需要复杂的编译的时候,可以通过自己定义一个任务用来定义编译
林德熙
2022/08/04
5310
RedTeam之msbuild without msbuild
得到dll后将msbuildapicaller.cs 的第60行替换成你smb服务器的程序地址..
鸿鹄实验室
2021/04/15
6200
RedTeam之msbuild without msbuild
Msbuild的三种利用方式
碎碎念:最近一直没更新文章,团队的小伙伴都到了找实习的时候,所以都在忙着找工作,恰巧又碰上国赛,耽搁了几天,不过目前都已尘埃落定,有几个去了甲方,都是三大运营商,还有的去了国内的一线乙方,对于我们这个普本来说成绩已然不错,继续加油。ps:有需要发招聘的老板可以私聊我哦,后台回复合作即可。
鸿鹄实验室
2021/07/06
1K0
Msbuild的三种利用方式
vs2015环境问题error MSB4036: 未找到SetEnvironmentVariable
错误1 error : 此编译的源文件可以在以下位置找到:“C:\Users\Merrya\AppData\Local\Temp\77717d73-33e2-455c-9afa-d9d8e10a4ec8.txt“
上善若水.夏
2019/04/09
2.6K0
msbuild help
用户3519280
2023/07/08
3490
msbuild 使用 ProduceOnlyReferenceAssembly 创建作为引用的仅公开成员程序集
本文告诉大家如何使用 msbuild 的 ProduceOnlyReferenceAssembly 功能,将某个程序集里面仅导出其中的公开成员定义,而不包含具体的实现的方法
林德熙
2021/12/24
7800
dotnet 通过引用 msbuild 程序集实现自己定制编译器
本来我想说的是基于引用 msbuild 程序集来自己做一个编译器,但是想想好像本文做的,和造编译器没啥关系,咱自己调用 msbuild 的 API 而已。本文来告诉大家如何引用 msbuild 程序集,如何在自己的应用程序里面嵌入 msbuild 的构建代码,实现 dotnet build 的效果
林德熙
2021/12/24
7600
【必知必会】深入解析强引用、软引用、弱引用、幻象引用
关于强引用、软引用、弱引用、幻象引用的区别,在BAT这样大公司的面试题中也经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用。
猿人谷
2020/06/19
5310
dotnet msbuild
dotnet msbuild - 生成项目及其所有依赖项。 注意:如果有多个解决方案或项目文件,可能需要指定一个。
呆呆
2022/01/05
4190
MSBuild入门
MSBuild是什么? MSBuild全称(Microsoft Build Engine),是用于构建应用程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。因为是它在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所包含的文件,生成配置,输出配置等信息。当把一个文件或者图片等添加到项目中,就会在这里添加一个描述,反之则删除一个描述信息;在项目属性页所做的配置也会在这
blackheart
2018/01/19
1.6K0
MSBuild入门
编写 MSBuild 内联编译任务(Task)用于获取当前编译环境下的所有编译目标(Target)
我之前写过一些改变 MSBuild 编译过程的一些博客,包括利用 Microsoft.NET.Sdk 中各种自带的 Task 来执行各种各样的编译任务。更复杂的任务难以直接利用自带的 Task 实现,需要自己写 Task。
walterlv
2020/02/10
1.2K0
MSBuild
MSBuild全称(Microsoft Build Engine),是用于构建应用程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。因为是它在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所包含的文件,生成配置,输出配置等信息。当把一个文件或者图片等添加到项目中,就会在这里添加一个描述,反之则删除一个描述信息;在项目属性页所做的配置也会在这里存储。
Centy Zhao
2020/04/10
8800
MSBuild
强引用/软引用/弱引用/虚引用解析和应用场景分析
我们平常普通写的 Object a=new object(); 创建对象就是一种强引用 当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收
名字是乱打的
2022/05/13
6720
强引用/软引用/弱引用/虚引用解析和应用场景分析
如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包
发布于 2018-05-11 16:04 更新于 2018-09-01 00:07
walterlv
2018/09/18
1.4K0
如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包
【JVM从小白学成大佬】3.深入解析强引用、软引用、弱引用、幻象引用
关于强引用、软引用、弱引用、幻象引用的区别,在很多公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用。
猿人谷
2020/06/19
4830
msbuild Roslyn 行为详解
项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv
林德熙
2021/11/24
4480
php的引用类型底层解析
我们可以看到,引用类型是一个变量zval和一个zend_refcounted_h组成 先看第一段的 a = "string";
程序员小饭
2020/09/07
3.9K0

相似问题

MSBuild UsingTask与解析引用

22

msbuild引用解析

12

MSBuild现在无法解析引用

25

msbuild - UnitTestFramework引用无法解析

314

指向当前项目dll的MSBuild UsingTask声明( AssemblyFile )

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文