如果您使用的是 .resx 文件,您可能希望利用 Visual Studio 为 .resx 文件提供的自动生成代码功能。如果您在多个项目中包含 .resx 文件,那么您可能希望每个项目自动生成自己的代码。您这样做可能是因为您想要对某些项目使用不同的代码生成器(ResXCodeFileGenerator 与 GlobalResourceProxyGenerator),或者您可能只是希望生成的代码的命名空间与项目保持一致。以下是如何进行设置。
我已经使用名为 SharedResx 的 C# 控制台应用程序项目设置了一个新的解决方案。我还在名为 Resources 的解决方案中添加了一个 C# 类库项目,并在该项目中添加了一个名为 MySharedResource.resx 的新资源文件。 Visual Studio 自动在我的 Resources 项目中创建一个 MySharedResource.Designer.cs 文件,其中的代码位于 Resources 命名空间内。
首先,将现有的 .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 的“属性”窗口中的“自定义工具”设置来指定 Generator 元素。
另请注意,在 LastGenOutput 元素中,我使用 SharedResx 项目名称作为前缀来命名生成的文件。这将导致 ResXFileCodeGenerator 在 .resx 文件所在的文件夹中创建一个名为 SharedResx.MySharedResource.Designer.cs 的文件。我尝试过在 LastGenOutput 元素中指定相对路径而不仅仅是文件名,以使生成的文件位于不同的文件夹(例如 SharedResx 文件夹)中,但我发现它不能一致地工作。虽然我第一次能够在正确的位置生成文件,但 LastGenOutput 元素丢失了其值,因此后续生成的文件不会定位到同一位置。我放弃了这一点,只是使用项目名称前缀作为文件名的一部分,以避免与其他项目可能发生的冲突。
现在,关闭 SharedResx.csproj 文件并再次右键单击以选择“重新加载项目”。右键单击 SharedResx 项目中链接的 MySharedResource.resx 文件,然后选择运行自定义工具。您现在应该看到名为 SharedResx.MySharedResource.Designer.cs 的新链接文件已作为 MySharedResource.resx 文件下的嵌套文件添加到项目中。您可能必须在“解决方案资源管理器”窗口中打开“显示所有文件”选项才能看到它。
现在,您已经从项目中包含的共享 .resx 文件自动生成了一个代码文件。