我在我的解决方案中为两个项目添加了Fody ProperyChanged。已在解决方案上启用程序包还原。但是,TFS构建服务无法构建,并出现以下错误:
WindowsUI.csproj(443):导入的项目 找不到“SolutionDir \ Tools \ Fody \ Fody.targets”。确认一下 声明中的路径是正确的,并且该文件存在 在磁盘上。
该文件夹确实不存在。显然,我可以将其检查为源代码控制。但是,它是否应该由NuGet Package Restore填充?或者我误解了NuGet Package Restore的功能?
答案 0 :(得分:3)
我遇到了类似的问题,试图在Visual Studio Online上构建解决方案。 问题是在项目构建之前还是在项目之前恢复了包 包中的文件和目标包含(仍有待恢复)已被解释。
使用before build hook,如下所述:
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>
答案 1 :(得分:2)
更新:此答案现在仅适用于1.13.0.0之前的版本。
SolutionDir\Tools\Fody
中的文件无法通过nuget部署,需要检入源代码管理
答案 2 :(得分: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
答案 3 :(得分:1)
当我尝试在NuGet包中发布构建更新时,您遇到了同样的问题。问题是在构建过程中调用NuGet包还原。因此,如果NuGet包还原还原了导入的.targets文件,则恢复得太晚。到文件写入磁盘时,由于文件不在磁盘上,<Import
元素已被评估并跳过。
我发现的最好的事情是构建另一个项目来为您调用包恢复。为了在安装NuGet包时为我自己的SlowCheetah NuGet包平滑这一点,我在与.csproj / .vbproj相同的导向器中创建一个packageRestore.proj
文件。然后用户可以构建此项目文件,然后构建.sln / .csproj / .vbproj。通过执行此操作,将恢复NuGet包,然后启动构建过程。
如果您对使用我的packageRestore.proj
感兴趣,我可以将SlowCheetah NuGet包的那部分重新考虑到它自己的部分,你的NuGet包可以依赖于那个。如果您对此感兴趣,请告诉我。