【问题标题】:Embed a resource conditionally in a CSPROJ有条件地在 CSPROJ 中嵌入资源
【发布时间】:2013-01-09 08:52:40
【问题描述】:

我正在尝试从两个不同的目录将资源嵌入到我的 CSPROJ 中,具体取决于配置。 This post 给了我这个想法,但它不起作用。任何帮助表示赞赏。

<Choose>
  <When Condition="'$(Configuration)' == 'Debug'">
    <ItemGroup>
      <EmbeddedResource Include="..\Debug\file.txt">
        <Link>Files\file.txt</Link>
      </EmbeddedResource>
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <EmbeddedResource Include="..\Release\file.txt">
        <Link>Files\file.txt</Link>
      </EmbeddedResource>
    </ItemGroup>
  </Otherwise>
</Choose>

我也试过这个,但效果同样糟糕。

<ItemGroup>
  <EmbeddedResource Include="..\$(Configuration)\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>

【问题讨论】:

  • 这应该可以工作:。为什么你说它不起作用?实际使用效果如何?如果您认为由于 VS 属性编辑器中的旧值而无法正常工作,请刷新它或重新加载项目 - 它对我有用
  • AFAIR,属性中的“完整路径”在我切换配置时不会改变。
  • 在解决方案资源管理器中点击刷新按钮,或在更改配置后重新打开解决方案/项目。即使您在属性编辑器中构建具有旧值的项目 - 它也应该尊重新值并正确构建。

标签: c# visual-studio


【解决方案1】:

您只需将条件放在 ItemGroup 元素上:

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <EmbeddedResource Include="..\Debug\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
  <EmbeddedResource Include="..\Release\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>

【讨论】:

  • 嗯...我已经尝试过了,但它不起作用。实际上,嵌入文件的属性没有更新。我不确定构建是否选择了正确的文件。需要检查一下。
  • 我假设这也可能有效。我选择了另一个答案,因为它更简单并且很好地满足了我的目的。不过,非常感谢和 +1。
  • 可以留下来吗? &lt;None Remove="..\Release\file.txt" /&gt;或者你也需要这部分的条件?
【解决方案2】:

正如我在 cmets 中对您的问题所说,这应该适合您:

<ItemGroup>
  <EmbeddedResource Include="..\$(Configuration)\file.txt">
    <Link>Files\file.txt</Link>
  </EmbeddedResource>
</ItemGroup>

即使您可能会在 VS 的属性编辑器的“完整路径”中看到旧值 - 当您构建时,它会尊重您当前的配置。 VS 属性编辑器应该通过解决方案资源管理器的刷新按钮更新,或者在最坏的情况下重新加载项目。可能正在将选择更改为其他文件并返回到 file.txt 将足以刷新属性编辑器。

更新

我已经弄清楚在这种情况下,我通过点击解决方案资源管理器的“刷新”按钮更改了完整路径 - 这是 Dll 引用的提示路径。

<Reference Include="MyDll">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\$(Configuration)\MyDll.dll</HintPath>
</Reference>

这仅在所有 DLL(在所有目标文件夹中)确实存在的情况下才有效。

由于某些原因,项目文件完整路径未刷新 - 对于文件项目 VS 始终认为当前配置名为 Debug - 即使您从项目中删除调试配置 .幸运的是,这个 VS 错误不会影响构建 - 它仍然会占用有效文件。

【讨论】:

  • 谢谢!所以,我从一开始就走在正确的轨道上。让我偏离正轨的是未经修改的“完整路径”。这个解决方案确实有效,但在我的 VS 2012 中,没有任何改变“完整路径”(没有你提出的技巧)。不过,如果嵌入工作正常,这是我最不担心的。
  • 刚刚提供了重要的更新,请参阅 - 它可能会帮助您调查解决方法,如果您发现请在此处发布
  • 这值得向 Microsoft 报告。除此之外,我很满意这种方法有效。 “完整路径”的价值虽然具有误导性,但实际上并不重要。
猜你喜欢
  • 2011-01-23
  • 2019-04-21
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多