在NAnt中仅设置一个项目的AssemblyName属性

时间:2015-01-30 00:35:59

标签: c# msbuild clickonce nant

我正在开发一个ClickOnce部署的应用程序,并希望将我的版本拆分为多个版本(一个"稳定"版本和一个"测试"版本)。我知道要保持我的测试和稳定版本分开,我需要设置" AssemblyName"财产是不同的。以下是我在NAnt脚本中对MSBuild的调用:

<msbuild project="../MyProject/MyProject/MyProject.csproj" target="publish">
  <property name="Configuration" value="Release"/>
  <property name="ApplicationVersion" value="${buildnumber.version}"/>
  <property name="ProductName" value="My Project (Test)"/>
  <property name="AssemblyName" value="MyProjectTest"/>
  <property name="InstallUrl" value="http://www.mycompany.com/software/MyProjectTest/"/>
</msbuild>

然而,我项目的一个参考资料是我自己也写过的图书馆。因此,引用是库的.csproj文件而不是DLL。上面的MSBuild调用似乎强制AssemblyName递归下降,将我的库项目的AssemblyName设置为&#34; MyProjectTest&#34;,当我希望它被调用时#& 34;在MyLibrary&#34;

这是来自MyProject.csproj的片段(即MyProject的MSBuild脚本),显示了对该库的引用:

<ItemGroup>
  <ProjectReference Include="..\..\MyLibrary\MyLibrary\MyLibrary.csproj">
    <Project>{A011B373-74D3-45EF-92E2-F342C572402A}</Project>
    <Name>MyLibrary</Name>
    <Private>True</Private>
  </ProjectReference>
</ItemGroup>

我有一些可行的解决方法,比如单独构建库,然后将引用设置为指向已编译的DLL而不是.csproj文件,或者手动复制并粘贴正确编译的版本从稳定版本的文件夹中删除了库,但我真正想要的是让NAnt正常工作。

所以,我想我的问题是这样的:有没有办法强制使用NAnt&#39; AssemblyName任务的一个项目msbuild

编辑:另一个小小的说明:几年前的另一个人也有同样的问题,但从来没有得到满意的解决方案。您可以在此处阅读问题(及相关评论):Change AssemblyName of a csproject via msbuild

1 个答案:

答案 0 :(得分:1)

当我需要调整类似的东西时,我通常使用xmlpokeloadfile / echo重写web.config或assemblyinfo.cs然后运行msbuild任务,仅指定解决方案名称。您还可以使用#if MYTHING在assemblyinfo.cs中有条件地定义AssemblyName,然后有条件地将<arg value='/p:DefineConstants=MYTHING' />作为msbuild任务的一部分传递。