如何在子目录中为C#文件编写DependentUpon子句?

rei*_*ost 7 csproj monodevelop visual-studio

我们试图让我们的C#应用程序编译和运行与

  • Visual Studio 10(使用Microsoft编译器),在Windows上,和
  • 在Linux上使用gmcs进行MonoDevelop

但是,.csproj文件中的部分(对于Visual Studio):

<Compile Include="Foo\Bar.cs" />
<EmbeddedResource Include="Foo\Bar.resx">
    <DependentUpon>Bar.cs</DependentUpon>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)

必须在使用MonoDevelop/gmcs之前进行如下更改(如果没有,在运行时,resources.GetObject()将抛出MissingManifestResourceException):

<Compile Include="Foo\Bar.cs" />
<EmbeddedResource Include="Foo\Bar.resx">
    <DependentUpon>Foo\Bar.cs</DependentUpon>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)

如何将其重写为他们都接受的形式?(DependentUpon当然,没有删除元素.)

rei*_*ost 4

与此同时,我研究了几种处理这种情况的方法。

\n\n

例如,显然可以添加Condition具有值的属性$(VisualStudioVersion) != \'\',以便使它们以是否使用 Visual Studio 为条件。

\n\n

然而,一时兴起(读完这个答案后后)我尝试了完全不同的东西:我替换了我的嵌套命名空间

\n\n
namespace Baz\n{\n    namespace Bar\n    {\n        [...]\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用点命名空间表示法:

\n\n
namespace Baz.Bar\n{\n    [...]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

voil\xc3\xa0MissingManifestResourceException不再存在,即使是原来的DependentUpon

\n\n

问题解决了,但不知道为什么。

\n