微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用VS构建配置设置嵌入式资源属性?

如何解决如何使用VS构建配置设置嵌入式资源属性?

我正在使用Visual Studio for Mac。

我发现了这个https://forums.xamarin.com/discussion/96777/how-to-set-info-plist-properties-with-vs-build-configurations,它描述了如何使用特定的构建配置来设置辅助plist文件。哪个效果很好。

<None Include="Entitlements.plist" Condition="'$(Configuration)' != 'Debug-Staging'" />
<None Include="Entitlements-staging.plist" Condition="'$(Configuration)' == 'Debug-Staging'">
  <LogicalName>Entitlements.plist</LogicalName>
</None>

但是这种方法不适用于嵌入式资源...

<EmbeddedResource Include="ClientResources\myfolder\config.json" 
         Condition="'$(Configuration)' != 'Debug-Staging'" />
<EmbeddedResource Include="ClientResources\myfolder\config-staging.json" 
           Condition="'$(Configuration)' == 'Debug-Staging'">
    <LogicalName>config.json</LogicalName>
</EmbeddedResource>

我还尝试了使用完整路径的LogicalName ... 另外,将条件放在ItemGroup上也无济于事。

编辑:

这是我创建的示例项目... https://github.com/JulesMoorhouse/ConfigBuildConfig/blob/master/ConfigBuildConfig/ConfigBuildConfig.csproj

如果选择了Debug-Staging配置,它将读取config-staging.json并在控制台中输出该值。

这些资料表明这应该可行...

解决方法

这里似乎有两个主要问题。

  1. 您的Debug-Staging配置已映射到Debug配置。

这意味着条件未用于EmbeddedResource。

如果右键单击“解决方案”窗口中的解决方案,然后选择“选项”,然后选择“构建-配置”,则可以看到映射。

如果在下拉菜单中选择“调试阶段”,则可以看到它在构建时已映射到“调试”。

作为此处的快速解决方案,我删除了Debug-Staging配置,重新添加了它,确保选中为所有解决方案项创建配置,然后将Debug-Staging映射到仅针对.NET Standard CreateBuildConfig项目的Debug,其他项目改用Debug。

完成此操作后,我在构建配置映射中添加了此

enter image description here

  1. LogicalName覆盖默认行为,并成为嵌入式资源的全名。

您的代码假定资源始终嵌入为:

  "ConfigBuildConfig.ClientResources.myfolder.config.json"

您可以更改两个EmbeddedResources,因此LogicalName为config.json,因此无需指定完整路径。

或者,为避免更改读取嵌入式资源的代码,您可以修改EmbeddedResource的LogicalName:

<EmbeddedResource Include="ClientResources\myfolder\config-staging.json" Condition="'$(Configuration)' == 'Debug-Staging'">
    <LogicalName>ConfigBuildConfig.ClientResources.myfolder.config.json</LogicalName>
</EmbeddedResource>

在这两件事情固定然后data.Environment显示“分期”当调试分段被选择为配置和“生产”当调试被选择作为主工具栏在配置中。

要使调试适用于Debug-Staging配置,我必须更新.NET Standard项目中的配置。 DebugType,DebugSymbols是需要添加的两个MSBuild属性,但完整的更改如下所示:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug-Staging|AnyCPU' ">
    <IntermediateOutputPath>obj\Debug-Staging</IntermediateOutputPath>
    <DebugType>portable</DebugType>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug-Staging</OutputPath>
    <DefineConstants></DefineConstants>
    <NoWarn></NoWarn>
    <NoStdLib>false</NoStdLib>
  </PropertyGroup>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。