首页 > 代码库 > Nuget For Msbuild的一个问题

Nuget For Msbuild的一个问题

项目中自搭Nuget服务器做为包管理,为了减轻创建Nuget包的工作量,找了一个Nuget For Msbuild的插件,在编译的时候可以自动生成包.

但今天出现一个很奇怪的问题,有个项目在编译的时候一直提示 

 

NuGet.for.MSBuild.targets(126,5): error MSB6006: “NuGet.exe”已退出,代码为 1。

 

百思不得其解,而且VS也没有过多的错误信息,不过可以确认的时候肯定是在创建包的时候出的问题,于是使用命令行MSBulid.exe来对项目进行编译看看有无更多的信息.

编译之后果然发现以下提示:

 

我VS设定的是Release,但是它还是从Debug中去找相关的DLL,但我当时清理引用的时候把Bin中的Debug,Release全删了,这也就解释了为什么有些项目可以生成成功,那是因为我并不是所有的文件夹都清理过. 

 

检查了一下项目属性,设定的输出目录都是对的,一时进入了死胡同,虽然可以生成一次Debug但看提示在Release发布的时候还是去引用Debug中的dll,这样就失去了Release发布的意义了

想了半天,决定手工编译一下csproj文件看看有无发现,因为编译的时候会利用它来对项目进行编译和发布.

    

    <Configuration Condition=" ‘$(Configuration)‘ == ‘‘ ">Debug</Configuration>

 

在第一个PropertyGroup中发现这个,在它下面还有分别对Debug和Replease发布的相关配置节点,我试着想也许是这个原因,个Nuget For Msbuild在创建包的时候并不会依据项目中当前设定的发布类型去查找相应的项目输出目录,而是利用这个节点中的内容去查找发布类型,于是调整一下:

 

<Configuration Condition=" ‘$(Configuration)‘ == ‘‘ ">Release</Configuration> 

 

这次再对项目进行编译,果然顺利搞定.

 

然后我这边又研究了一下,我不太清楚csproj中各个节点的具体作用,但看内容猜测应该是默认的(或者当前定义的发布类型),但是在VS中更改发布类型时此节点并未有调整,之后因为项目中有其它事情要处理,这个暂时先告一段落了..