Problem
In my ASP.NET Core project, I referenced the NuGet package tinymce.7.3.0.nupkg
, which contains the following build\TinyMCE.targets
file:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<SourceScriptFiles Include="$(MSBuildThisFileDirectory)..\content\scripts\tinymce\**\*.*" />
</ItemGroup>
<Target Name="CopyScriptsToProject" BeforeTargets="Build">
<Copy SourceFiles="@(SourceScriptFiles)" DestinationFolder="$(ProjectDir)\wwwroot\lib\tinymce\%(RecursiveDir)" />
</Target>
</Project>
After installing this package, the TinyMCE files are copied to the wwwroot\lib\tinymce
directory during the build.
I created a similar NuGet package Moonglade.MonacoEditor
with the following build\Moonglade.MonacoEditor.targets
file:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<SourceFiles Include="$(MSBuildThisFileDirectory)..\content\monaco\**\*.*" />
</ItemGroup>
<Target Name="CopyScriptsToProject" BeforeTargets="Build">
<Copy SourceFiles="@(SourceFiles)" DestinationFolder="$(ProjectDir)\wwwroot\lib\moonglade-monaco\%(RecursiveDir)" />
</Target>
</Project>
This package also successfully copies files to wwwroot\lib\moonglade-monaco
during the build.
However, when both packages are referenced in the same ASP.NET Core project, only the files from Moonglade.MonacoEditor
are copied, and no files from the TinyMCE package are copied to wwwroot\lib
.
Solution
After work 996. I found that in MSBuild, target names must be unique. If two `.targets` files define targets with the same name (e.g., CopyScriptsToProject
), the latter will overwrite the former, resulting in only the files from the last loaded package being copied.
To resolve this issue, I need to rename the target, ensure each `.targets` file has a unique target name. Since I do not own TinyMCE, I have to rename target in my own Moonglade.MonacoEditor
package.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<SourceFiles Include="$(MSBuildThisFileDirectory)..\content\monaco\**\*.*" />
</ItemGroup>
<Target Name="CopyMonacoScriptsToProject" BeforeTargets="Build">
<Copy SourceFiles="@(SourceFiles)" DestinationFolder="$(ProjectDir)\wwwroot\lib\moonglade-monaco\%(RecursiveDir)"
/>
</Target>
</Project>
Now, both packages can correctly copy their own files!
Comments