发行使用PostSharp 3.X用的NuGet自动恢复(Issue Using PostSharp

2019-10-20 17:42发布

我有很多项目,其中一些使用PostSharp的解决方案。 我最近使用的NuGet的MSBuild切换集成恢复的NuGet自动恢复。 这将导致恢复所有必要的包都包构建开始之前。 这个伟大的工程,但现在我遇到一个问题,经常在那里PostSharp将失败,错误的构建:

构建恢复的NuGet包。 再次生成项目,包括在构建这些软件包。 欲了解更多信息,请参见http://www.postsharp.net/links/nuget-restore 。

当我编辑项目文件我会看到以下条目:

  <Import Project="..\..\packages\PostSharp.3.1.46\tools\PostSharp.targets" Condition="Exists('..\..\packages\PostSharp.3.1.46\tools\PostSharp.targets')" />
  <Target Name="EnsurePostSharpImported" BeforeTargets="BeforeBuild" Condition="'$(PostSharp30Imported)' == ''">
    <Error Condition="!Exists('..\..\packages\PostSharp.3.1.46\tools\PostSharp.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://www.postsharp.net/links/nuget-restore." />
    <Error Condition="Exists('..\..\packages\PostSharp.3.1.46\tools\PostSharp.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://www.postsharp.net/links/nuget-restore." />
  </Target>

正如你所看到的,有存在的时候我的机器上的NuGet包,也是我的机器上不存在错误条件。 看来,这些条件进行评估,因为变量$(PostSharp30Imported)永远不会设置。 我假设这个东西是依赖于恢复的MSBuild的集成版本,但我没有足够的MSBuild经验,知道肯定。

我能够通过简单地在项目文件中删除第二差错情况(因为我保证该项目建立的时候有文件)来解决这个问题,但它似乎是PostSharp的任何升级或增加导致项目文件要恢复到老样子,并阻止我的解决方案从建筑。

这是PostSharp一个bug,或者是有一些其他的方式使用的NuGet自动恢复不会引起这个问题时,我应该与PostSharp工作?

Answer 1:

如果你已经完全从旧的基于MSBuild的包迁移恢复远,那么你不应该看到错误消息,如果您使用的是最新的NuGet的版本。 Visual Studio中检查的.nuget / NuGet.targets文件的存在和不使用如果这个文件存在新的Visual Studio基于包恢复。

当您生成项目,但MSBuild的开始之前将发生新的自动包恢复。 这意味着MSBuild的尝试编译项目前的PostSharp的MSBuild目标文件中定义的不同的MSBuild属性将被导入。 在这种情况下,应PostSharp30Imported定义,使自定义的目标永远不会运行。 如果不存在PostSharp.targets文件而被的MSBuild编译项目将只运行。

对于上了年纪的MSBuild基于包还原,因为同时的MSBuild正在运行,这样他们就无法使用,因此不会导入,第一个构建构建将还原的目标文件中的错误信息是正确的。

创建一个新的项目,增加PostSharp,删除所有的包,然后重新编译这个项目我没有看到错误消息。



文章来源: Issue Using PostSharp 3.x with NuGet Auto Restore