几年前曾问过类似的question,但我想知道过渡期间是否有任何改变,或者人们是否有新想法如何做到这一点。
我已将MSBuildTasks(MSBuild社区任务)作为Nuget包导入到我的解决方案中的项目中。我可以为.targets文件的路径定义一个属性,如下所示:
<PropertyGroup>
<MSBuildTasks>$(SolutionDir)Packages\MSBuildTasks.1.5.0.235\tools\MSBuild.Community.Tasks.Targets</MSBuildTasks>
</PropertyGroup>
...然后使用以下方法导入:
<Import Project="$(MSBuildTasks)"/>
当然,我可能会选择稍后更新软件包,在这种情况下文件夹名称会发生变化,因此我更倾向于避免对版本号进行硬编码。我想要避免这种情况的一种方法是让PowerShell脚本查找最新版本:
function Find-PackagePath
{
[CmdletBinding()]
param(
[Parameter(Position=0,Mandatory=1)]$packagesPath,
[Parameter(Position=1,Mandatory=1)]$packageName
)
return (Get-ChildItem ($packagesPath + "\" + $packageName + "*")).FullName | Sort-Object $_ | select -Last 1
}
...并将其作为MSBuild的命令行属性注入:
msbuild $solutionFile "/p:Configuration=$buildConfiguration;Platform=$buildPlatform;MSBuildTasks=$MSBuildTasks";
我可以通过一条消息确认注入的路径确实已传输到我的目标:
<Target Name="_ReportMSBuildTasksPath" BeforeTargets="_ComputeSemanticVersion">
<Message Text="MSBUILDTASKS = $(MSBuildTasks)"/>
</Target>
...但是如果我尝试使用上面的相同import语句导入,则会收到以下错误消息:
The value "" of the "Project" attribute in element <Import> is invalid. Parameter "path" cannot have zero length.
这是我用尽的想法。如何避免在工具路径中对版本号进行硬编码?
答案 0 :(得分:0)
我发现你需要手动导入一些东西很奇怪。
MSBuildTasks NuGet包中包含build\MSBuildTasks.targets
。 Visual Studio应该自动将此文件的导入添加到.csproj文件中。
此导入路径由Visual Studio中的NuGet Package Manager维护。
因此,您应该能够使用所需的任务而无需手动导入任何内容。
如果它不起作用,请检查.csproj文件是否真的包含自动生成的导入到上面提到的正确的.targets
文件。