我正在尝试从两个不同的目录中将资源嵌入到我的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>
答案 0 :(得分: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>
答案 1 :(得分:3)
正如我在对你的问题的评论中所说,这对你有用:
<ItemGroup>
<EmbeddedResource Include="..\$(Configuration)\file.txt">
<Link>Files\file.txt</Link>
</EmbeddedResource>
</ItemGroup>
即使您可能在VS的属性编辑器的“完整路径”中看到旧值 - 在构建时,它将尊重您当前的配置。 VS属性编辑器应该通过解决方案资源管理器的刷新按钮更新,或者在最坏的情况下重新加载项目。可能是将选择更改为其他文件并返回file.txt就足以刷新属性编辑器。
<强>更新强>:
我已经弄清楚在哪种情况下,通过点击解决方案资源管理器的“刷新”按钮来改变我的完整路径 - 这是Dll Reference的提示路径。
<Reference Include="MyDll">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\$(Configuration)\MyDll.dll</HintPath>
</Reference>
仅当所有DLL(在所有目标文件夹中)确实存在时才会起作用。
由于某些原因,项目文件不刷新完整路径 - 对于文件项 VS始终认为当前配置名为Debug - 即使您从项目中删除调试配置 。幸运的是,这个VS Bug不会影响构建 - 它仍将采用有效文件。