MSBuild从输出中排除卫星程序集

7

能否告诉MSBuild不要为某个程序集或所有程序集复制卫星程序集?

我有一个NuGet包,其中包含资源程序集,但我不想将它们包含在我的输出中。

谢谢。


你设置了 [CopyLocal=false] 吗?(https://dev59.com/_3E95IYBdhLWcg3wDpcG) - KMoraz
1
我仍然希望将程序集复制,但不包括 NuGet 包中的卫星程序集。 - DELUXEnized
2个回答

0
你可以为部署创建一个单独的文件夹,例如\Build_Archive,将输出复制到该文件夹中,并在构建脚本中添加一些行以将您的程序集(但不包括卫星程序集)复制到这些文件夹中。这样,Build_Archive始终只包含部署所需的文件。
例如,我的当前脚本会将文件复制到标记为build#的文件夹和Current文件夹中,因此Current始终具有最新版本,并且我们保留先前构建的历史记录,如下所示:
C:\Build_Archive\AppName\Current
C:\Build_Archive\AppName\1.0.0.1
C:\Build_Archive\AppName\1.0.0.2

在您的构建脚本末尾添加类似以下内容(将<values>替换为您自己的内容。我们的脚本使用外部DLL来管理版本号等,因此此处不包括):

 <!-- . . . -->
 <DropLocation>\\<serverName>\Build_Archive\${BuildDefinition}</DropLocation>
 <!-- . . . -->

 <!-- Version numbers major and build are replaced by outside calls not shown -->
 <PropertyGroup>
   <VersionMajor>1</VersionMajor>
   <VersionMinor>0</VersionMinor>
   <VersionService>0</VersionService>
   <VersionBuild>0</VersionBuild>
 </PropertyGroup>

 <Target Name="BuildNumberOverrideTarget">
 <!-- Create a custom build number, matching the assembly version -->
 <!-- . . . -->
 <!-- …  custom version code call – returns / sets VersionMajor and VersionBuild -->
  <PropertyGroup>
   <BuildNumber>$(BuildDefinitionName)_$(VersionMajor).$(VersionMinor).$(VersionService).$(VersionBuild)</BuildNumber>
  </PropertyGroup>
  <Message Text="Build number set to &quot;$(BuildNumber)&quot;" />
  <Message Text="$(SolutionRoot)"/>
 </Target>


 <Target Name="AfterCompile">
 <!-- Call Copy process after the build -->
  <CallTarget Targets="CleanUp"/>
  <CallTarget Targets="StageBuild"/>
  <CallTarget Targets="CopyFiles"/>
 </Target>

 <!-- Target : Clean Current Folder for next build -->
 <Target Name="CleanUp">
  <Message Text="**** Entering::CleanUp ****"/>
  <CreateItem Include="\\<server name>\Build_Archive\<appName>\Current\**\*.*">
   <Output ItemName="PreviousFiles" TaskParameter="Include" />
  </CreateItem>
  <Delete Files="@(PreviousFiles)" ContinueOnError="true" />
 </Target>

 <!-- Target:StageBuild -->
 <Target Name="StageBuild">
 <ItemGroup>
  <BldCurrent Include="\\<server name>\Build_Archive\<appName>\Current\"/>
 </ItemGroup>
 <Message Text="@(BldCurrent)"/>
 <Message Text="$(SolutionRoot)"/>
 <!— Here – replace next line with commands to copy only the files you want to deploy -->
  <Exec Command="xcopy /y /r /e $(SolutionRoot)\..\bin\*.* @(BldCurrent)"/>
 </Target>

 <!-- Target : Copy files from Current to BuildNum folder -->
 <Target Name="CopyFiles">
  <Exec Command="xcopy /y /r /e $(DropLocation)\Current\Debug\*.* $(DropLocation)\$(BuildNumber)\Debug\"/>

  <Exec Command="Del /Q $(DropLocation)\Current\Debug\*.config"/>
  <Exec Command="Del /Q $(DropLocation)\Current\Debug\*.dll"/>
  <Exec Command="Del /Q $(DropLocation)\Current\Debug\*.exe"/>
  <Exec Command="Del /Q $(DropLocation)\Current\Debug\*.application"/>
  <Exec Command="Del /Q $(DropLocation)\Current\Debug\*.pdb"/>
  <Exec Command="Del /Q $(DropLocation)\Current\Debug\*.txt"/>
  <Exec Command="Del /Q $(DropLocation)\Current\Debug\*.xml"/>
 </Target>

0
尝试使用以下参数调用MSBuild:
/p:UseWPP_CopyWebApplication=True /p:PipelineDependsOnBuild=False

这将应用与VisualStudio相同的web.config转换。此外,bin文件夹输出与VisualStudio发布相同。卫星程序集未直接复制到bin文件夹中,而是保留在它们的bin子文件夹中。

另请参见:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接