我们的具体项目适用于Windows Phone,但我认为这个问题同样适用于所有基于xaml的项目。我们有一堆图像资源仅在设计时使用,并且不希望它们作为已发布版本的一部分。如果可能的话,我们也希望它们不属于Debug
配置版本。有没有人有关于如何做到这一点的最佳实践?
一种解决方案是继续在项目中包含图像,但将构建操作设置为None
。这个问题很容易让人忘记,因为图像的默认设置是将它们包含在Content
中。
理论上,另一种解决方案是将这些图像添加到仅在Debug版本中引用的程序集中,但我尚未测试它。我不知道Blend或VS设计师是否能够很好地使用该解决方案,而且我们宁愿不将这些图像作为Debug构建的一部分。
答案 0 :(得分:2)
我们使用DesignTime
数据并将它们从发布版本中排除,
Maximizing the Visual Designer’s Usage with Design-Time Data在最底部有一节“从生产构建中排除设计时数据”,它可以很好地满足我们的要求。
从以上链接中提取:
从生产构建中排除设计时数据 小心处理时,设计时代码对生产应用程序没有害处(因为它不是在运行时执行),但是从生产版本中排除此代码和所有相应的资产(例如图像)仍然是可取的。
为此,您需要使用以下步骤手动修改CSPROJ文件。在当前版本的Visual Studio 2012中没有其他方法可以做到这一点。
并选择Reload Project。
<Compile Include="Design\DesignRssService.cs"
Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "/>
可以在所有设计时文件上设置此条件,包括图片和其他资源。排除的项目仍将在解决方案资源管理器中可见,但它们不会包含在最终的二进制文件中。实际上,如果在排除DesignRssService之后构建解决方案,则会在ViewModelLocator中出现编译错误。
您必须在预编译器指令中包含使用DesignRssService的代码行,如下所示:
if (ViewModelBase.IsInDesignModeStatic)
{
#if DEBUG
SimpleIoc.Default.Register<IRssService, Design.DesignRssService>();
#endif
}
else
{
SimpleIoc.Default.Register<IRssService, RssService>();
}