Я работаю над одним проектом OSS, который использует nuget для распространения своих пакетов.
Сегодня я столкнулся с проблемой, что некоторые проекты хороши, когда вы ссылаетесь на них напрямую, но они не восстанавливаются из nuget из-за странных ошибок управления версиями.
Так что я бы хотел предотвратить слияние непригодного кода в главную ветвь.
Я удалил все локальные ссылки и создал следующее событие перед сборкой:
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn/CodeGeneration.Roslyn.csproj"" />
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn.Attributes/CodeGeneration.Roslyn.Attributes.csproj"" />
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn.Tasks/CodeGeneration.Roslyn.Tasks.csproj"" />
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn.Tool/CodeGeneration.Roslyn.Tool.csproj"" />
</Target>
Хорошо, теперь он упаковывает все необходимые проекты. Тогда я хочу сослаться на них. Теперь моя предварительная сборка выглядит так:
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn/CodeGeneration.Roslyn.csproj"" />
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn.Attributes/CodeGeneration.Roslyn.Attributes.csproj"" />
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn.Tasks/CodeGeneration.Roslyn.Tasks.csproj"" />
<Exec Command=""$(MSBuildBinPath)\msbuild.exe" /t:pack "$(SolutionDir)CodeGeneration.Roslyn.Tool/CodeGeneration.Roslyn.Tool.csproj"" />
<Exec Command="Install-Package CodeGeneration.Attributes -Source "$(SolutionDir)../bin/Packages/$(Configuration)"" />
<Exec Command="Install-Package CodeGeneration.Tasks -Source "$(SolutionDir)../bin/Packages/Packages/$(Configuration)"" />
<Exec Command="Install-Package CodeGeneration.Roslyn -Source "$(SolutionDir)../bin/Packages/Packages/$(Configuration)"" />
<Exec Command="Install-Package dotnet-codegen -Source "$(SolutionDir)../bin/Packages/Packages/$(Configuration)"" />
</Target>
Но это не работает из-за:
Install-Package: не найдено совпадений по заданным критериям поиска
и имя пакета «CodeGeneration.Attributes». Tr y Get-PackageSource
чтобы увидеть все доступные источники зарегистрированных пакетов. В строке: 1 символ: 1
+ Install-Package CodeGeneration.Attributes -Source C: \ Users \ Alex \ Sourc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: ObjectNotFound: (Microsoft.Power .... InstallPackage: InstallPackage) [Install-Package],
Исключение
+ FullyQualifiedErrorId: NoMatchFoundForCriteria, Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Кажется, что он не любит предварительные версии пакетов (они выглядят как CodeGeneration.Roslyn.0.4.38-gfe7ce5be9d.nupkg
), хорошо, проверяя документацию и пытаясь добавить флаг -IncludePrerelease
, но он тоже не работает:
Install-Package: не найден параметр, соответствующий параметру
название «IncludePrerelease». В строке: 1 символ: 126
+ ... os \ CodeGeneration.Roslyn \ src ../ bin / Packages / Debug -IncludePrerelease
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Install-Package], ParameterBindingException
+ FullyQualifiedErrorId: NamedParameterNotFound, Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Как это могло быть сделано? Может быть, есть другой подход, который проще и лучше? Я описал это так подробно, потому что не хочу попадать в ловушку X-Y.