Dotnetnuke(DNN)升级模块打包

DotNetNuke模块打包依赖于MSBuildTasks,在NuGet出现之前,MSBuildTasks需要单独安装。很多模块基于这种方式,使用Visual Stuido 2010到2017都还可以工作,可升级到Visual Studio 2019以后,打包时出现错误,需要采用新的方式更新打包脚本。首先,在项目中使用NuGet引用MSBuildTasks的最新版本,然后修改BuildScripts中的MSBuild.Community.Tasks.Targets:

1
2
<!--  <MSBuildCommunityTasksLib>$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll</MSBuildCommunityTasksLib> -->
<MSBuildCommunityTasksLib>$(SolutionDir)\packages\MSBuildTasks.1.5.0.235\tools\MSBuild.Community.Tasks.dll</MSBuildCommunityTasksLib>

将原来从本地安装路径的引用改为从项目的packages中引用。关闭解决方案,然后再重新打开,就可以了。

另外,还需要将csproj项目中对原来MSBuild的引用修改为新的引用:

1
2
3
4
5
6
7
<Import Project="packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets" Condition="Exists('packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets'))" />
</Target>

需要注意,上面的代码需要移动到 Condition=” ‘$(Configuration)|$(Platform)’ == ‘Debug|AnyCPU’ “相关代码的前面,否则编译会出错。