You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MSBuild构建过程中自动下载Maven构件?

可行方案推荐

方案1:直接用MSBuild任务下载并提取XSD

无需额外工具,利用.NET SDK自带的DownloadFile任务和tar命令(跨平台支持),在构建前自动下载Maven构件并提取XSD文件。在你的.csproj中添加以下配置:

<Target Name="FetchMavenXsdArtifacts" BeforeTargets="BeforeBuild">
  <!-- 配置Maven构件信息 -->
  <PropertyGroup>
    <MavenGroup>com.your.group</MavenGroup>
    <MavenArtifact>your-xsd-artifact</MavenArtifact>
    <MavenVersion>1.2.3</MavenVersion>
    <MavenRepo>https://repo1.maven.org/maven2</MavenRepo>
    <!-- 临时下载路径 -->
    <JarDownloadPath>$(Temp)/maven/$(MavenArtifact)-$(MavenVersion).jar</JarDownloadPath>
    <!-- 项目内XSD存放目录 -->
    <XsdExtractDir>$(MSBuildProjectDirectory)/MavenXsd</XsdExtractDir>
  </PropertyGroup>

  <!-- 仅当JAR未下载时执行下载 -->
  <DownloadFile
    SourceUrl="$(MavenRepo)/$(MavenGroup.Replace('.','/'))/$(MavenArtifact)/$(MavenVersion)/$(MavenArtifact)-$(MavenVersion).jar"
    DestinationFileName="$(JarDownloadPath)"
    Condition="!Exists('$(JarDownloadPath)')" />

  <!-- 仅当XSD目录不存在时解压提取XSD -->
  <Exec Command="tar -xf &quot;$(JarDownloadPath)&quot; -C &quot;$(XsdExtractDir)&quot; --wildcards *.xsd"
        Condition="!Exists('$(XsdExtractDir)')" />

  <!-- 将提取的XSD文件纳入项目 -->
  <ItemGroup>
    <None Include="$(XsdExtractDir)/**/*.xsd" />
  </ItemGroup>
</Target>

说明:

  • DownloadFile是MSBuild内置任务,负责从Maven仓库下载JAR包;
  • tar命令由.NET SDK自带,跨Windows/macOS/Linux可用,无需额外安装;
  • 任务会在每次构建前检查文件是否存在,避免重复下载和解压。

方案2:将Maven构件转为NuGet包(一劳永逸)

把包含XSD的Maven JAR包转换成NuGet包,之后就能像普通NuGet依赖一样直接在项目中引用,步骤如下:

  1. 解压Maven JAR包,提取所有.xsd文件到本地目录(比如./XsdFiles);
  2. 创建MyXsdPackage.nuspec文件:
    <?xml version="1.0"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
      <metadata>
        <id>YourCompany.XsdFromMaven</id>
        <version>1.2.3</version>
        <authors>YourName</authors>
        <description>XSD files imported from Maven artifact</description>
      </metadata>
      <files>
        <!-- 将XSD文件打包到NuGet的contentFiles目录,自动复制到项目 -->
        <file src="XsdFiles/**/*.xsd" target="contentFiles/any/any/MavenXsd" />
      </files>
    </package>
    
  3. 执行nuget pack MyXsdPackage.nuspec生成NuGet包;
  4. 将生成的.nupkg发布到本地NuGet源、私有源或公共源;
  5. 在你的.NET项目中直接通过NuGet包管理器引用这个包,XSD文件会自动被纳入项目。

备选方案(需额外依赖)

如果能接受安装Maven CLI,可以在.csproj中添加MSBuild任务调用mvn dependency:get下载构件,再提取XSD,但这需要提前安装Maven,不符合你“无需依赖其他程序”的理想情况,仅作参考。

内容的提问来源于stack exchange,提问作者fharreau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:17:23