.NET Core工程编译事件$(TargetDir)变量为空引发的思考

小说:云上有赚是真的吗作者:杜龙公更新时间:2019-04-19字数:15638

“天魔化血神刀?天魔寄生da法?”纪太虚在一边儿看了皱着眉头心中想到:“这厮既然有这宝贝,会这功夫,定然是赤炼老祖无疑!天魔化血神刀很是歹毒,只要被这刀砍中,便会毒发全身,神仙难救!除了炼制这刀的时候跟这刀一起出炉的三枚丹药方可解!天魔寄生da法,乃是将自身元神分出一部分寄托到一个活物之上,用秘法培育,形似第二元神却并非第二元神。”

没事在家干什么

因为,丁宁想的是,一首歌给当红明星唱,就算他只拿5%的分成收益,也可能比从主播身上拿100%分成收益的高,这样一来,赵书锋开多高的分成比例都没有意义。
一时间,整个忙碌的大厅,顿时安静下来,就像是突然切换了静音模式一般。

季胜催马上前笑道:“我们身份不好泄(露),让张县令让我们进城,我再私下告诉你。”

  • 前言

最近客户反馈,为啥不用xcopy命令代替我自己写的命令来完成插件编译复制:

我的:

<PostBuildEvent>call "$(SolutionDir)tools oolsMagicodes.CmdTools.exe" copy -s "$(SolutionDir)plusJxy.WeChatJxy.WeChat.CoreinDebug et461Jxy.WeChat.Core.dll" -t "$(SolutionDir)srcMagicodes.Admin.Web.MvcwwwrootPlugIns"</PostBuildEvent>

<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>

 

推荐的:

call xcopy /s /y "$(TargetPath)" "$(SolutionDir)src Magicodes.Admin.Web.Mvc wwwrootPlugIns"

 

我深以为然,xcopy是我之前经常用来做编译复制的命令,为啥我后面自己整了一个工具来复制呢?太久了,记不起来了,索性鼓捣鼓捣。

 

  • $(TargetPath)变量为空

很快,我就发现了问题。在.NET Core的工程中,很多变量是获取不到值的,如下命令:

<PropertyGroup>

<PostBuildEvent>

echo 准备复制"$(TargetPath)"

call xcopy /s /y "$(TargetPath)" "$(SolutionDir)srcMagicodes.Cloud.AdminwwwrootPlugIns"

</PostBuildEvent>

 

</PropertyGroup>

输出:

但是在VS的命令行编辑工具里面,这些变量应该都是有值的:

于是我回想起来了,之前似乎就是遇到这个问题,因为时间紧迫,自己写了一个命令行工具代替了之前的命令。今天再次碰到,于是决心深挖一下,从理论上来讲,VS不应该犯这么低级的错误。

 

  • 寻找原因,解决问题

我想,这个问题已经出现许久了,也许老外会给我一些启发。找过了stackoverflow,没发现有用的信息,不过最终在Github找到了一些有用的内容。

比如说这篇:

https://github.com/dotnet/sdk/issues/1055

$(TargetPath) or $(TargetDir) are empty on PostBuild event on netstandard project

从下面的答复中,我们看到了这条关键内容:

大意似乎是,编译事件被target元素代替了。但是大哥,都这么久了,为啥通过项目工程的界面编辑,生成的元素还是PostBuildEvent,你们这不是坑人么。。。

说明一点,VS界面的调整跟不上相关API和规则的调整。。。

问题似乎解决了:

我们再进一步完善:

看起来需求已经实现了,理论上就可以就此结束了。但是Target是什么鬼?

 

  • 进阶

来来来,我们直接去看官方文档:

https://msdn.microsoft.com/zh-cn/library/t50z2hka.aspx

突然发现这是一个很有意思的元素。文档很简单,但是我发现基于此,可以有很多玩法。

比如你看看这篇:https://msdn.microsoft.com/zh-CN/library/3e54c37h.aspx

那么,我们可以将上述命令进行改进:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">

<Message Text="将插件复制到插件目录" Importance="high" />

<Copy DestinationFolder="$(SolutionDir)srcMagicodes.Cloud.AdminwwwrootPlugIns" SourceFiles="$(TargetPath)" SkipUnchangedFiles="true" />

</Target>

是否看起来又更进了一步。

Import是什么鬼?请看大屏幕,哦,看链接:

https://msdn.microsoft.com/zh-cn/library/ms171464.aspx

copyplus.props定义如下:

<Project>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">

<Message Text="将插件复制到插件目录" Importance="high" />

<Copy DestinationFolder="$(SolutionDir)srcMagicodes.Cloud.AdminwwwrootPlugIns" SourceFiles="$(TargetPath)" SkipUnchangedFiles="true" />

</Target>

</Project>

至此,本篇完成。

希望本篇内容,能够给大家更多启发,并且开发出更多玩法。

编辑:纯王

发布:2019-04-19 05:31:41

当前文章:http://scycxh.com/9xigt/67802.html

手机工作室新项目 大荔县公安局吴巍 晚上跑众包怎么赚钱 薅羊毛淘宝活动群 淘宝接单官网 赚赏金的二维码在哪里 刷单返佣金群 发朋友圈赚钱app

18814 66417 43028 53472 27525 1120544296 89733 31113

我要说两句: (0人参与)

发布