我正在尝试在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]
值得一提的是,我在发布位置发布了较旧的版本,其中程序集名称未更改。这会引起我看到的冲突吗??
答案 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>
工作正常,没有任何问题,并且程序集名称也已更改:
因此,此问题应该与SessionModel.cs
文件和warning MSB3277
中的错误CS1528有关。要解决CS1528错误,可以检查文档Compiler Error CS1528了解更多详细信息。
对于warning MSB3277
,您可以将“ MSBuild项目生成输出详细程度”更改为“详细”,以检查参考冲突并解决此冲突。您可以查看this thread了解更多详细信息。
希望这会有所帮助。
答案 1 :(得分:0)
事实证明,问题是我在项目中包含了System.net.http.dll
作为文件。设置为 Content 作为构建操作。当我将其更改为嵌入式资源时,它开始工作。