我们试图让我们的 C# 应用程序编译并同时运行两者
- Visual Studio 10(带有Microsoft编译器),在Windows上,以及
- MonoDevelop with gmcs, on Linux
但是,.csproj
文件中的类似部分(对于 Visual Studio):
<Compile Include="FooBar.cs" />
<EmbeddedResource Include="FooBar.resx">
<DependentUpon>Bar.cs</DependentUpon>
</EmbeddedResource>
在它们与 MonoDevelop/gmcs 一起使用之前,必须按如下方式进行更改(如果没有,则在运行时为资源。GetObject() 将抛出一个 MissingManifestResourceException):
<Compile Include="FooBar.cs" />
<EmbeddedResource Include="FooBar.resx">
<DependentUpon>FooBar.cs</DependentUpon>
</EmbeddedResource>
如何将其重写为他们都会接受的形式?(当然,不包括删除DependentUpon
元素。
我研究了几种处理这种情况的方法。
例如,显然可以添加具有值$(VisualStudioVersion) != ''
的Condition
属性,以便使它们以是否正在使用Visual Studio为条件。
但是,一时兴起(阅读此答案后),我尝试了一些完全不同的东西:我替换了嵌套的命名空间
namespace Baz
{
namespace Bar
{
[...]
}
}
使用虚线命名空间表示法:
namespace Baz.Bar
{
[...]
}
瞧,即使有原来的DependentUpon
条款,MissingManifestResourceException
也不再存在。
问题解决了,但我不知道为什么。