2011-09-08 48 views
1

我有一个为多个客户构建的解决方案,我需要能够为每个客户指定不同的xml文件。我怎样才能自动做到这一点。我认为这可能是用不同的配置完成的,但似乎无法弄清楚。如何根据配置自动更改构建哪些文件 - visual studio

有什么建议吗?

编辑:

这是用于现在的声明XML文件中的代码:

protected readonly static string XML_PATH = @"Resources/xml/Description.xml"; 

,现在是解决的问题是正确的文件之前手动复制到Description.xml方式建造。这当然是容易出错的,我想将它自动化,优先基于配置。我现在正在寻找一个快速解决方案,因为我们很遗憾没有时间重构代码。

+0

是否构建了xml文件?你究竟是什么意思? –

+0

不建立xml,它只是包含一些描述。这些说明因客户而异,我希望能够根据不同的配置确定使用哪个文件。 – Keller

回答

1

根据您重新的问题:

你可以使用条件编译如果你想阅读了关于

protected readonly static string XML_PATH = 
#if DEBUG 
@"Resources/xml/Description.xml"; 
#else 
@"Resources/xml/Description2.xml"; 
#endif 

:(警告:它的混乱,而不是管理配置文件以正确的方式)更好的管理配置文件的技巧,this值得一读。

+0

感谢您的链接,我已经使用生成事件和.bat文件解决了我的问题。 – Keller

1

构建配置相关的配置文件是一个棘手的问题,并有多种方法来解决它。

如果您想要描述您所概述的道路,您需要手动编辑* .csproj文件并添加一个条件项目组以包含正确的xml文件。下面的语法没有得到遏制,但这样的事情应该做

<ItemGroup Condition="'${Configuration}' == 'DEBUG'"> 
<Content Include="blablabl.xml"/> 
</ItemGroup> 

我不记得,如果内容是正确的ItemGroup,而只是检查什么的ItemGroup您当前.xmls是在和使用。

+0

我不认为我想搞乱配置文件。我编辑了澄清问题,但我不确定这会不会解决我的问题。也许我在这里错过了一些东西。 – Keller

0

现在,我现在自我推销是皱眉了,但在这种情况下,我希望它没关系,因为它听起来与这个问题有关,我从中获益不多。

最近我写了一篇关于如何定位多个环境/机器一对夫妇的博客文章:

Targeting multiple environments and machines - part 1/2

Targeting multiple environments and machines – part 2/2

据我了解,在这种情况下,问题是你怎么了自动构建正确的一组文件,而无需手动确定哪些文件属于哪个客户/环境。我在博客文章中提出的解决方案建议使用nAnt以及一些基于顶级的扩展。 nAnt是Ant的.NET版本,一种构建工具,可让您生成xml文件提供了一组特定的输入文件,允许您例如生成客户特定的web.config文件。

在web.config文件中的下列appSetting部分,说你要为客户名称键为每个客户指定一个不同的值:

<appSettings> 
    <add key="CustomerName" value="${CustomerName}"/> 
</appSettings> 

除了指定的客户名称关键值,你定义一个名为CustomerName的属性。现在,假设我们使用的是恶性,再创建一个客户的具体文件,内容如下:然后

<?xml version="1.0" encoding="utf-8"?> 
<target xmlns="http://nant.sf.net/release/0.86-beta1/nant.xsd"> 
    <property name="CustomerName" value="Acme Incorporated"/>  
</target> 

楠可以合并这两个文件,并自动建立客户/环境的具体文件,为您服务。

我经历的解决方案允许您自动构建环境和机器特定的文件,例如网页。配置文件,但也允许您输出静态文件,如许可证文件或库,全部取决于您定位的环境/机器。我还提供了一个示例Visual Studio 2010解决方案,其中显示了有关如何执行此操作的非常基本的示例,您可以使用该解决方案download here

你当然可以继续前进,看看nAnt,但我想我会为你提供使用我的解决方案的选项。

+0

感谢您的建议,它看起来很有趣,但是这对我来说似乎有点矫枉过正,因为我正在寻找一个快速解决方案:-)一旦我有足够的时间,我可能会考虑这一点。 – Keller

+0

在这种情况下,您是否考虑添加预生成事件?右键单击您的项目,选择“属性”,然后“生成事件”。如果为每个客户添加特定的生成配置,则可以使用$ {ConfigurationName}宏确定要将哪个xml文件复制到解决方案。在预构建事件中查看更多信息:http://msdn.microsoft.com/en-us/library/42x5kfw4.aspx – Tchami

+0

我最终使用了构建事件。谢谢。 – Keller

相关问题