4

我将Fody ProperyChanged添加到我的解决方案中的两个项目中。解决方案上启用了包还原。但是,TFS 构建服务构建失败并出现以下错误:

WindowsUI.csproj (443):未找到导入的项目“SolutionDir\Tools\Fody\Fody.targets”。确认声明中的路径正确,并且该文件存在于磁盘上。

该文件夹确实不存在。显然,我可以将其签入源代码控制。但是,它不应该由 NuGet 包还原填充吗?还是我误解了 NuGet 包还原的作用?

4

4 回答 4

3

我在尝试在 Visual Studio Online 上构建解决方案时遇到了类似的问题。问题是包在项目构建之前被恢复,但在此之前项目文件和包中的目标包含(仍待恢复)已经被解释。

使用这里描述的 before build 钩子:

http://sedodream.com/2010/10/22/MSBuildExtendingTheSolutionBuild.aspx

在您的 before.solutionname.sln.targets 文件中放置类似这样的内容,以强制在构建第一个项目之前恢复所有包:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
     DefaultTargets="Build"
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<Target Name="BeforeBuild" BeforeTargets="Build">
 <Message Text="Restoring all nuget packages before build" Importance="high">
 </Message>
<Exec Command=".\.nuget\NuGet.exe restore YourSolution.sln" />
</Target>
</Project>

如果您有外部包源,请在您的 nuget.config 文件中配置它们,该文件也应该在 .nuget 文件夹中。例如:

<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="YourSource" value="http://yoursource.somewhere.net/nuget" />
  </packageSources>
  <packageRestore>
    <!-- Allow NuGet to download missing packages -->
    <add key="enabled" value="True" />

    <!-- Automatically check for missing packages during build in Visual Studio -->
    <add key="automatic" value="True" />
  </packageRestore>
</configuration>
于 2014-07-09T09:31:29.083 回答
2

更新:此答案现在仅适用于 1.13.0.0 之前的版本。

里面的文件SolutionDir\Tools\Fody不能通过nuget部署,需要签入源码管理

于 2013-01-15T00:47:09.190 回答
2

从 1.13.0.0 版(2013 年 3 月 23 日发布)开始,Fody 是一个 100% 的 nuget 部署工具,因此它可以与包还原一起使用。

https://nuget.org/packages/Fody/

这将在您安装 Fody Nuget 时出现 https://github.com/Fody/Fody/blob/master/NuGet/readme.txt

于 2013-04-07T22:17:53.210 回答
1

当我尝试在 NuGet 包中发布构建更新时,您遇到了同样的问题。问题是在构建过程中调用了 NuGet 包还原。因此,如果 NuGet 包还原还原已导入的 .targets 文件,则还原为时已晚。到文件写入磁盘时,<Import由于文件不在磁盘上,该元素已被评估并跳过。

我发现的最好的事情是构建另一个项目来为您调用包还原。为了在安装 NuGet 包时为我自己的SlowCheetah NuGetpackageRestore.proj包解决这个问题,我在与 .csproj/.vbproj 相同的目录中创建了一个文件。然后用户可以构建此项目文件,然后构建 .sln/.csproj/.vbproj。通过这样做,NuGet 包被恢复,然后构建过程开始。

如果您有兴趣使用我的packageRestore.proj我可以将 SlowCheetah NuGet 包的那一部分重新分解为它自己的一部分,并且您的 NuGet 包可以依赖于那个。如果您对此感兴趣,请告诉我。

于 2013-01-14T18:02:06.963 回答