通过MSBuild Target更改AssemblyName

时间:2018-10-24 11:13:57

标签: c# visual-studio msbuild

我正在尝试在Project.csproj文件中配置MSBuild目标。使用以下命令调用名为“ Test”的目标:

msbuild.exe / target:测试

但是,我不知道如何为此目标更改AssemblyName(原始程序集名称为MyProject)。我的代码如下:

<Target Name="Test">
  <PropertyGroup>
    <PublishUrl>D:\PublishLocation\ClickOnce Setup\</PublishUrl>
  </PropertyGroup>
  <MSBuild Projects="$(ProjLocation)\$(ProjectName).csproj" Properties="ProductName=$(ProductName) (Test); AssemblyName=MyProjectTest; PublishUrl=$(PublishUrl)" Targets="Publish" />
  <ItemGroup>
    <SetupFiles Include="$(ProjPublishLocation)\*.*" />
    <UpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*" />
  </ItemGroup>
  <Copy SourceFiles="@(SetupFiles)" DestinationFolder="D:\PublishLocation\ClickOnce Setup\" />
  <Copy SourceFiles="@(UpdateFiles)" DestinationFolder="D:\PublishLocation\ClickOnce Setup\Application Files\%(RecursiveDir)" />
</Target>

如果我从代码中删除了AssemblyName=MyProjectTest;,它就可以正常工作。如果按上述方式运行,则会出现以下错误:

  

“ C:\ Users \ ... \ MyProject \ MyProject.csproj”   (测试目标)(1)->   “ C:\ Users \ ... \ MyProject \ MyProject.csproj”   (发布目标)(1:2)->

     

(CoreCompile目标)->
  Models \ SessionModel.cs(207,51):错误CS1528:预期;或=(不能   在声明中指定构造函数参数)[   C:\ Users \ ... \ MyProject \ MyProject.csproj]

     

(...还有很多,或多或少都相同)

更新

我在构建输出中发现了更多(也许更有趣)的警告:

  

“ C:\ Users \ ... \ MyProject \ MyProject.csproj”   (快速目标)(1)->   “ C:\ Users \ ... \ MyProject.csproj”   (发布目标)(1:2)->(ResolveAssemblyReferences目标)->
  C:\ Program档案   (x86)\ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1820,5):   警告MSB3277:   发现不同版本的   无法解决的相同从属程序集。这些参考   当日志详细程度设置为时,与构建日志中列出的re冲突   详细。 [C:\ Users \ ... \ MyProject \ MyProject.csproj]

值得一提的是,我在发布位置发布了较旧的版本,其中程序集名称未更改。这会引起我看到的冲突吗??

2 个答案:

答案 0 :(得分:1)

  

通过MSBuild Target更改AssemblyName

根据您的Test目标和another post,我创建了一个示例应用程序,用于通过以下脚本和MSBuild命令行msbuild.exe /target:Test测试此问题:

  <PropertyGroup>
    <ProjLocation>$(ProjectDir)</ProjLocation>
    <ProjLocationReleaseDir>$(ProjLocation)\bin\Debug</ProjLocationReleaseDir>
    <ProjPublishLocation>$(ProjLocationReleaseDir)\app.publish</ProjPublishLocation>
    <DeploymentFolder>D:\PublishFolder\Test\</DeploymentFolder>
  </PropertyGroup>

  <Target Name="Test" DependsOnTargets="Clean">
    <MSBuild Projects="$(ProjLocation)\$(ProjectName).csproj" Properties="ProductName=$(ProductName) (Test); AssemblyName=MyProjectTest; PublishUrl=$(PublishUrl)" Targets="Publish" />

    <ItemGroup>
      <SetupFiles Include="$(ProjPublishLocation)\*.*" />
      <UpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(SetupFiles)" DestinationFolder="$(DeploymentFolder)\Public Test\" />
    <Copy SourceFiles="@(UpdateFiles)" DestinationFolder="$(DeploymentFolder)\Public Test\Application Files\%(RecursiveDir)" />
  </Target>

工作正常,没有任何问题,并且程序集名称也已更改:

enter image description here

因此,此问题应该与SessionModel.cs文件和warning MSB3277中的错误CS1528有关。要解决CS1528错误,可以检查文档Compiler Error CS1528了解更多详细信息。

对于warning MSB3277,您可以将“ MSBuild项目生成输出详细程度”更改为“详细”,以检查参考冲突并解决此冲突。您可以查看this thread了解更多详细信息。

希望这会有所帮助。

答案 1 :(得分:0)

事实证明,问题是我在项目中包含了System.net.http.dll作为文件。设置为 Content 作为构建操作。当我将其更改为嵌入式资源时,它开始工作。