6

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

<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>
4

2 回答 2

4

您只需将条件放在 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>
于 2013-01-08T21:34:38.110 回答
3

正如我在对您的问题的评论中所说,这应该对您有用:

<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 错误不会影响构建 - 它仍然会占用有效文件。

于 2013-01-08T21:37:30.127 回答