c# - 如何让不同的解决方案引用一个 resx 文件?

标签 c# .net visual-studio

我有一个 resx 文件,我想从多个解决方案\项目中使用它,我不想在每个解决方案中都有本地副本(仅在编译时带一份副本)。

有什么办法吗?因为当我将其添加为“添加现有文件”时,它会在本地复制一份副本。

知道怎么做吗?

最佳答案

如果您使用的是 .resx 文件,您可能希望利用 Visual Studio 为 .resx 文件提供的自动生成代码功能。如果您在多个项目中包含一个 .resx 文件,那么您可能希望让每个项目自动生成自己的代码。您可能会这样做,因为您希望对某些项目使用不同的代码生成器(ResXCodeFileGenerator 与 GlobalResourceProxyGenerator),或者您可能只希望生成的代码的命名空间与项目保持一致。设置方法如下。

我已经使用名为 SharedResx 的 C# 控制台应用程序项目设置了一个新的解决方案。我还向名为 Resources 的解决方案添加了一个 C# 类库项目,并在该项目中添加了一个名为 MySharedResource.resx 的新资源文件。 Visual Studio 使用 Resources 命名空间内的代码自动在我的 Resources 项目中创建一个 MySharedResource.Designer.cs 文件。

首先,如其他答案所述,将您现有的 .resx 文件作为链接包含在 SharedResx 控制台应用程序项目中。添加现有项目 -> 找到 ..\Resources\MySharedResource.resx -> 使用“添加”按钮上的下拉列表选择“添加为链接”。

接下来,您必须手动修改项目文件以设置自动生成。您可以查看 Resources.csproj 以了解自动生成的设置方式,作为其在 SharedResx.csproj 中的外观指南。 右键单击 SharedResx 项目并选择卸载项目。再次右键单击并选择编辑 SharedResx.csproj。 向下滚动以找到与链接的 .resx 文件对应的 EmbeddedResource 元素:

<EmbeddedResource Include="..\Resources\MySharedResource.resx">
  <Link>MySharedResource.resx</Link>
</EmbeddedResource>

修改它以包含一个 Generator 元素和一个 LastGenOutput 元素:

<EmbeddedResource Include="..\Resources\MySharedResource.resx">
  <Link>MySharedResource.resx</Link>
  <Generator>ResXFileCodeGenerator</Generator>
  <LastGenOutput>SharedResx.MySharedResource.Designer.cs</LastGenOutput>
</EmbeddedResource>

注意:只有在您想要控制生成文件的名称时才需要手动编辑,就像我在示例中所做的那样。否则,您可以使用 Visual Studio 属性窗口中的自定义工具设置指定生成器元素。

另请注意,在 LastGenOutput 元素中,我使用 SharedResx 项目名称作为前缀来命名生成的文件。这将导致 ResXFileCodeGenerator 在与 .resx 文件相同的文件夹中创建一个名为 SharedResx.MySharedResource.Designer.cs 的文件。我已经尝试在 LastGenOutput 元素中指定相对路径而不仅仅是文件名,以便将生成的文件放在不同的文件夹中,例如 SharedResx 文件夹,但我发现它不能始终如一地工作。虽然我第一次能够在正确的位置生成文件,但 LastGenOutput 元素丢失了它的值,因此后续生成不会以同一位置为目标。我放弃了,只是将项目名称前缀用作文件名的一部分,以避免与其他项目可能发生冲突。

现在,关闭 SharedResx.csproj 文件并再次右键单击以选择“重新加载项目”。右键单击 SharedResx 项目中链接的 MySharedResource.resx 文件,然后选择运行自定义工具。您现在应该会看到名为 SharedResx.MySharedResource.Designer.cs 的新链接文件已作为 MySharedResource.resx 文件下的嵌套文件添加到项目中。您可能需要在“解决方案资源管理器”窗口中打开“显示所有文件”选项才能看到它。

现在,您的项目中包含了一个从共享的 .resx 文件自动生成的代码文件。

关于c# - 如何让不同的解决方案引用一个 resx 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4197029/

相关文章:

c# - 带有卡住标题和列的水平和垂直 GridView

visual-studio - VS 项目卸载和重新加载

visual-studio - VSTS 发布管理转换 web.config

c# - 按顺序替换占位符

c# - C# 应用程序启动时出现 fatal error

c# - 如何获取数据库序列生成的新对象 ID?

c# - 如何在 ASP.Net Core - CKEDITOR 5 上使用自定义上传适配器?

c# - 在没有 list 文件的情况下卸载事件源 (ETW)?

c# - .net 核心 IActionResult 返回 OK()

c# - C#中多个参数占用多行