Другой подход заключается в изменении рассматриваемого элемента <Import>
, чтобы сделать его условным, например:
<Import Project="$(CodeAssassinTargets)" Condition="Exists($(CodeAssassinTargets))" />
Это зависит от нового свойства, определенного в более раннем <PropertyGroup>
.Я обычно добавляю один файл вверху файла csproj с другими «глобальными» флагами, например:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<CodeAssassinTargets>$(SolutionDir)packages\CodeAssassin.ConfigTransform.1.1\tools\CodeAssassin.ConfigTransform.targets</CodeAssassinTargets>
<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
<UseMsdeployExe>true</UseMsdeployExe>
</PropertyGroup>
Затем в соответствующей цели, например BeforeBuild, выдается полезное сообщение об ошибке:
<Target Name="BeforeBuild">
<Error Text="CodeAssassin.ConfigTransforms target is missing. It needs to exist at $(CodeAssassinTargets) in order to build this project!" Condition="!Exists($(CodeAssassinTargets))" />
</Target>
С этими изменениями проект будет загружаться, даже если восстановление пакета nuget никогда не выполнялось.Если автоматическое восстановление пакетов включено, первая попытка сборки должна устранить проблему с отсутствующей целью, но если это не так, будет выполнено одно ручное восстановление пакета.