2013-09-26 141 views
7

Chúng tôi đang cố gắng để có được ứng dụng C# của chúng tôi để biên dịch và chạy với cảCách viết mệnh đề DependentUpon cho các tệp C# trong thư mục con?

  • Visual Studio 10 (với trình biên dịch Microsoft), trên Windows, và
  • MonoDevelop với gmcs, trên Linux

Tuy nhiên, bộ phận như thế này trong .csproj file (cho Visual Studio):

<Compile Include="Foo\Bar.cs" /> 
<EmbeddedResource Include="Foo\Bar.resx"> 
    <DependentUpon>Bar.cs</DependentUpon> 
</EmbeddedResource> 

phải được thay đổi như sau trước khi họ sẽ làm việc với MonoDevelop/gmcs (nếu không, lúc chạy, resources.GetObject() sẽ ném một MissingManifestResourceException):

<Compile Include="Foo\Bar.cs" /> 
<EmbeddedResource Include="Foo\Bar.resx"> 
    <DependentUpon>Foo\Bar.cs</DependentUpon> 
</EmbeddedResource> 

Làm thế nào để viết lại này thành một hình thức mà họ sẽ cả hai chấp nhận? (Dĩ nhiên, ngắn gọn là xóa DependentUpon phần tử.)

Trả lời

3

Trong khi đó, tôi đã nghiên cứu một số cách để giải quyết tình huống.

Ví dụ: it is apparently possible để thêm Condition thuộc tính với giá trị $(VisualStudioVersion) != '' để làm cho chúng có điều kiện về việc liệu Visual Studio có đang được sử dụng hay không.

Tuy nhiên, trên một ý thích (sau khi đọc this answer) Tôi cố gắng một cái gì đó hoàn toàn khác nhau: Tôi thay namespace lồng nhau tôi

namespace Baz 
{ 
    namespace Bar 
    { 
     [...] 
    } 
} 

với ký hiệu namespace chấm:

namespace Baz.Bar 
{ 
    [...] 
} 

thì đấy, các MissingManifestResourceException không còn tồn tại, ngay cả với mệnh đề DependentUpon gốc.

Sự cố được giải quyết, nhưng tôi không biết tại sao.